下面以Windows XP系统为宿主系统(qemu的运行环境)。
以ubuntu为qemu的虚拟系统(在qemu内运行)。
由于ubuntu的权限问题,如果执行命令失败,请尝试使用sudo提升权限。
一、对宿主系统(Windows)安装TAP-Win32虚拟网卡,并加入-net参数运行qemu
* 安装OpenVPN
下载OpenVPN的Windows安装程序。
http://openvpn.net/index.php/open-source/downloads.html
默认勾选TAP Virtual Ethernet Adapter。
安装结束后,Windows会出现一个新的虚拟网卡。
* 设置qemu外windows的虚拟网卡的IP
右键“网络邻居”->属性,打开“网络连接”
把新的TAP-Win32 Adapter V9网卡的名称改为my-tap。
右键->属性->Internet协议(TCP/IP)
双击后选择“使用下面的IP地址”
把IP地址和子网掩码分别改为:
192.168.200.10
255.255.255.0
其余留空,因为这里并不需要也没有DNS服务器,
而是要自己手动为网卡分配不同的IP。
上面就是为那张虚拟网卡配IP(不影响另一张真实网卡)。
系统托盘一般会出现一个新的“网络连接”图标,
因为还没连接上虚拟机,所以出现一个红色的叉(没有连接)。
* 用-net参数启动qemu虚拟机
假设我的硬盘镜像是ubuntu.bin,在命令提示符下执行:
>qemu.exe -L . -m 1024 -hda ubuntu.bin -localtime -net nic -net tap,ifname=my-tap
其中-net nic表示虚拟机(qemu)内的OS添加新的网卡。
如果不添加,ubuntu中键入ifconfig将看不到eth0(即第一张网卡)。
而-net tap,ifname=my-tap表示为虚拟机(qemu)外的系统(这里是Windows XP)指定网卡。
如果不添加,默认就是连真实网卡而非OpenVPN中自带的虚拟网卡。
my-tap是虚拟网卡的名称,可以用openvpn --show-adapters查看。
因为我用中文版的Windows XP会产生带空格的中文网卡名,
所以我把它改为英文my-tap(和重命名文件的方法一样)。
更多信息请google这个关键词“qemu openvpn”。
或者参考以下网址(日文):
http://www.h7.dion.ne.jp/~qemu-win/TapWin32-ja.html
如果系统启动成功,你会看到系统托盘的新网络图标提示连接上网络。
* 配置qemu内ubuntu的网卡IP和默认网关
为虚拟机内部设置一个不同的IP(假设为192.168.200.11)
如果不设置IP,ifconfig命令将不会得到IPv4的地址
打开终端(应用程序->附件->终端),键入命令如下:
$ sudo ifconfig eth0 192.168.200.11
这里eth0是指第一张网卡,可以用ifconfig查看。
然后,把虚拟机外部的host机IP(假设为192.168.200.10)设置为默认网关。
如果不设置网关,ping命令将出现Destination Host Unreachable错误。
键入指令如下:
$ sudo route add default gw 192.168.200.10 eth0
如果操作正常的话,你可以访问默认网关192.168.200.10
(即虚拟机外Windows的那个虚拟网卡TAP-Win32 Adapter V9)
尝试连接宿主系统的网卡:
$ ping 192.168.200.10
可以看到ping可以到达宿主机器。
* 关于网络设置的补充说明
通常使用192.168.*.*格式的IP。
因为192.168.0.0-192.168.255.255(192.168/16)属特殊IP地址段供本地使用。
只是这样的IP不可以直接用于互联网(这里没有问题)。
有些命令可以是这样的:
1. 添加默认网关时可以忽略最后的eth0。
route add default gw 192.168.200.10
2. 配置以太网广播地址和子网掩码(可以省略)。
ifconfig eth0 broadcast 255.255.255.255 netmask 255.255.255.0
* 恢复IP设置
正常情况下,只要重启qemu就可还原虚拟机内ubuntu的IP和网关设置。
如果想手动删除默认网关,可键入:(假设虚拟网卡以192.168.200.10为IP)
$ sudo route del default gw 192.168.200.10 eth0
如果想重新设置虚拟系统(例如qemu内的ubuntu)的对外IP,
直接执行ifconfig指定新的IP即可。
例如sudo ifconfig eth0 192.168.200.12。
* qemu可能会启动失败
qemu可能会在启动时挂掉(不知为何,可能是虚拟网卡的问题),重启再试。
二、让虚拟机内的ubuntu可以访问宿主Windows的共享文件。
* 设置windows的共享文件
我的电脑->工具->文件夹属性->查看
去掉“使用简单文件共享(推荐)前的勾。
然后创建或找一个需要共享的目录,
右键->属性->共享->共享此文件夹,
你可以在对话框中设置读写权限。
然后点“权限”设置用户名。
权限->添加->高级->立即查找。
如果你想添加新的Windows用户,可以这样:
我的电脑->右键->管理->本地用户和组->用户->右键->新用户。
然后重新查找用户名。
设置完后文件夹会出现一个手掌。
* 用虚拟机内的ubuntu访问windows的共享文件夹
按照(一)配好ubuntu的IP后。
系统菜单->位置->网络。
打开“Windows网络”->WORKGROUP。
你会看到宿主计算机的名称。
打开后(或者在打开共享目录后)提示输入用户名和密码。
输入宿主Windows的用户名和密码。
连接成功后,就可以看到Windows的文件了。
(ubuntu好像默认自带了samba的功能)
三、让虚拟机内的ubuntu可以访问宿主Windows的ftp。
* 安装FileZilla的Windows服务器端(Server版)
http://filezilla-project.org/
开始菜单中选择FileZilla Server Interface。
打开管理界面,主菜单->Edit->Users添加用户名和密码。
加入新的Shared folders(共享文件夹),指定读写权限。
* 在Windows命令提示符下测试ftp连接(21端口)
假设我的用户名是test,密码是test。
C:\Documents and Settings\Administrator>ftp localhost
提示输入用户名和密码(注意密码是没有回显的)
登陆成功的话会显示
230 Logged on
ftp>
然后输入ls可以查看目录。
* 用虚拟机内的ubuntu访问windows的ftp文件夹
按照(一)配好ubuntu的IP。
登陆ftp的方法之一是使用终端。
输入ftp命令(假设宿主的虚拟网卡IP是192.168.200.10)
$ ftp 192.168.200.10
其余操作和windows的操作相同。
另一种方法是
系统菜单->位置->连接到服务器
服务类型选择:FTP(需登录)
输入相应的信息后弹出对话框。
输入密码后,即可看到宿主系统ftp的文件。
四、在Windows上访问虚拟机内的ubuntu的ftp文件夹
* 安装ftp服务器vsftpd
$ sudo apt-get install vsftpd
* 启动vsftpd服务
重启ubuntu。
按照(一)加入-net参数和配好ubuntu的IP。
键入下面的命令启动服务
$ sudo service vsftpd start
* 在windows上用IE访问ubuntu的ftp文件夹(默认是根目录)。
首先测试一下连接(假设ubuntu的网卡IP是192.168.200.11)
> ping 192.168.200.11
然后在虚拟机中看看vsftpd监听哪个端口
$ sudo netstat -anp | grep vsftpd
可以看到它正在监听tcp的21端口。
(可以修改/etc/vsftpd.conf来更改端口)
然后打开IE。输入ftp://192.168.200.11/
输入用户名和密码。即可访问ubuntu的整个根目录。
(如果乱码,可以改为utf-8编码)
如果使用其它浏览器(如Chome和Firefox),可能打开的是/home对应的用户目录。
五、在Windows上用telnet远程登陆虚拟机内的ubuntu
* 安装telnetd服务器
$ sudo apt-get install telnetd
虽然网上说要用xinetd,而且要修改配置文件,
但我发现只安装telnetd也可以在启动时运行telnetd服务。
* 尝试在windows上用telnet远程登陆ubuntu
重新启动qemu。
按照(一)加入-net参数和配好ubuntu的IP。
在windows下测试连接(假设ubuntu的网卡IP已经手动设置为192.168.200.11)
> ping 192.168.200.11
然后用telnet 192.168.200.11登陆上ubuntu
> telnet 192.168.200.11
提示u中t输入用户名和密码(密码是无回显的)
登陆后显示最后登陆时间、Linux的版本号、ubuntu的版本号和欢迎。
最后出现提示符。
你可以像在ubuntu的终端那样输入Linux命令(有些输出可以带颜色)。
* 乱码问题
如果有乱码,可能是字符集的问题(ubuntu使用utf-8编码)。
你可以使用一些较高级的程序代替windows的telnet命令行。
例如PuTTY可以设置窗口的字符集为UTF-8。
http://www.chiark.greenend.org.uk/~sgtatham/putty/download.html
* 可不可以在ubuntu上远程登陆自己呢?
我试过是可以的,不过需要小心,
因为telnet登陆后的提示符和登陆前是相同的。
很容易弄错(因为不知道现在是不是在远程登陆),
所以最好不要直接在ubuntu上telnet自己。
参考资料:
1. Tapの使い方
http://www.h7.dion.ne.jp/~qemu-win/TapWin32-ja.html
2. Quick HOWTO : Ch16 : Telnet, TFTP, and xinetd/zh
http://wiki.ubuntu.org.cn/Quick_HOWTO_:_Ch16_:_Telnet,_TFTP,_and_xinetd/zh
3. Ubuntu Telnet 服务开启
http://space.itpub.net/7735683/viewspace-487329
转载:http://www.4ucode.com/Study/Topic/1158530