[笔记] UserMode Linux 通过Host的eth0连接外网
2014-09-27 13:00
288 查看
编译了一下UserMode Linux(UML),尝试系统Kernel Module的调试,突然突发奇想想让UML连接到网络。
网上找了很多教程,大多是安装一个套件,然后就可以轻松配置了。不过网络应用调用的系统内核基本相同,所以就想直接用Ubuntu 14.04自带的ip,route,iptables来完成这个任务。
当然,编译UserMode Linux不用多说,下个源码包,ARCH=um make menuconfig然后ARCH=um make tar-pkg得到可执行程序linux和一个启动tar包。
先用tar包做一个Initrd文件,find . | cpio -o -H newc | gzip -c > initrd.img
在这之前,要让Linux启动到命令行,下一个busybox源码,static编译,把可执行文件busybox考出来,用ln把init, sh, ln链出来。在initrd.img中,把/etc/init.d/rcS添上mount和mknod让proc sysfs可见,并关联好各个设备包括null,tty等。
下面就是配置网络了,原本我是建立了一个桥,然后照着LXC的网络配置去配,可是发现UML据说不支持veth,只支持TUN/TAP,没办法,就研究下它的配置吧:
在Host(Ubuntu 14.04)上:
这样直接启动UML: ./linux initrd=initrd.img mem=64M eth0=tuntap,um0tap,,10.0.1.101
在UML里,ln好ifconfig和route:
后续是个坑爹的问题,用busybox的nslookup死活查不到DNS,比如nslookup www.baidu.com,就是没有结果,但ping百度的ip可以通,纠结了好半天。
一怒把Ubuntu里的glibc库全部复制到initrd,再把nslookup复制进去,运行,可以nslookup了,看来coreutils和busybox的实现还是不一样的,有空再看看源码好了。
到这里UML可以用busybox的httpd架网站了,也可以连外网,运行运行病毒也没啥。
至此,UML支持网络连接就这么解决了。
J.Y.Liu
2014.09.26
网上找了很多教程,大多是安装一个套件,然后就可以轻松配置了。不过网络应用调用的系统内核基本相同,所以就想直接用Ubuntu 14.04自带的ip,route,iptables来完成这个任务。
当然,编译UserMode Linux不用多说,下个源码包,ARCH=um make menuconfig然后ARCH=um make tar-pkg得到可执行程序linux和一个启动tar包。
先用tar包做一个Initrd文件,find . | cpio -o -H newc | gzip -c > initrd.img
在这之前,要让Linux启动到命令行,下一个busybox源码,static编译,把可执行文件busybox考出来,用ln把init, sh, ln链出来。在initrd.img中,把/etc/init.d/rcS添上mount和mknod让proc sysfs可见,并关联好各个设备包括null,tty等。
下面就是配置网络了,原本我是建立了一个桥,然后照着LXC的网络配置去配,可是发现UML据说不支持veth,只支持TUN/TAP,没办法,就研究下它的配置吧:
在Host(Ubuntu 14.04)上:
# 添加TUN/TAP ip tuntap add um0tap mode tap ifconfig um0tap 10.0.1.1 netmask 255.255.255.0 up # 靠eth0接入外网 iptables -t nat -A POSTROUTING -s 10.0.1.0/24 -o eth0 -j MASQUERADE echo 1 > /proc/sys/net/ipv4/ip_forward route add -host 10.0.1.1 dev um0tap echo 1 > /proc/sys/net/ipv4/conf/um0tap/proxy_arp arp -Ds 10.0.1.1 eth0 pub
这样直接启动UML: ./linux initrd=initrd.img mem=64M eth0=tuntap,um0tap,,10.0.1.101
在UML里,ln好ifconfig和route:
ifconfig eth0 10.0.1.101 netmask 255.255.255.0 up ifconfig lo up route add default gw 10.0.1.1然后就可以ping通10.0.1.1,Host的192.168.1.0/24和外网的ip了。
后续是个坑爹的问题,用busybox的nslookup死活查不到DNS,比如nslookup www.baidu.com,就是没有结果,但ping百度的ip可以通,纠结了好半天。
一怒把Ubuntu里的glibc库全部复制到initrd,再把nslookup复制进去,运行,可以nslookup了,看来coreutils和busybox的实现还是不一样的,有空再看看源码好了。
到这里UML可以用busybox的httpd架网站了,也可以连外网,运行运行病毒也没啥。
至此,UML支持网络连接就这么解决了。
J.Y.Liu
2014.09.26
相关文章推荐
- ubuntu安装openssh-server 报依赖错误的解决过程 ubuntu自带的有openssh-client,所以可以通过 1 ssh username@host 来远程连接linux 可
- linux源码阅读笔记 move_to_user_mode()解析
- [大数据入门-linux]linux通过ssh连接时出现 WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!
- 虚拟机下运行linux通过nat模式与主机通信、与外网连接
- Linux学习笔记(六)---Xshell通过公钥连接CentOS系统
- vmware下linux通过host-only方式与windows共享网络
- vmware 中的linux通过xp中的ccproxy的telnet代理用telnet连接bbs
- Linux下通过freetds连接MSSQL数据库
- 数据连接部分通过测试源代码-----java学习笔记之4
- 允许远程机器连接 update user set host='%' where user='root';
- s3c2410 linux 与主机telnet连接缓慢 以及ping通外网中遇到的问题
- JavaScript学习笔记2:通过user-Agent获取浏览器和操作系统信息
- 通过 ssh proxy 代理连接远端 linux PC 图形界面 [图文]
- 通过ssh连接开发板——arm-linux下ssh的移植
- windows通过VNC连接linux (Fedora 12)
- Linux下通过EXPECT脚本自动执行ssh远程连接
- Linux下通过freetds连接MSSQL数据库
- Linux下通过USB连接并利用手机拨号上网
- 数据库服务器 之 在Linux下使用perl通过unixODBC连接SQLServer2000