Chinaunix首页 | 论坛 | 博客
  • 博客访问: 206429
  • 博文数量: 9
  • 博客积分: 1082
  • 博客等级: 少尉
  • 技术积分: 332
  • 用 户 组: 普通用户
  • 注册时间: 2006-01-06 09:41
文章分类

全部博文(9)

文章存档

2011年(5)

2010年(2)

2009年(2)

我的朋友

分类: 虚拟化

2011-11-24 09:53:55

这段时间本来是要仔细分析一下字符集和字符编码的原理,特别是在UNIX/Linux环境输入和显示中文的问题,搭建了一个win7下的ubuntu虚拟机,需要在Host(win7)和Guest(ubuntu)之间传送文件进行实际验证。架设Guest上的FTP服务器的时候,遇到了网络上的问题。相关问题比较杂,在网上没有找到描述比较具体和准确的文章,自己摸索了一番,将这个问题总结如下。

1)环境描述:
-Host操作系统:win7
-Guest操作系统:Ubuntu11.10 服务器版
-虚拟机软件:ORACLE VirtualBOX4.0.8
-虚拟机网络连接方式:NAT (其他虚拟机软件,例如vmware也很类似)
-Host上的FTP客户端软件,Filezilla 3.5.1
-Guest上的FTP服务端软件,proftpd 1.3.4

2)网络连接方式的选择:
虚拟机软件都是通过虚拟网络接口(包括虚拟路由器/交换机等)的方式实现Host和Guest的互访,以及Guest访问外网的需求,VirtualBOX支持以下四种网络连接方式
a)NAT方式;
      可以从Guest通过NAT方式访问外网(相对Host而言)资源,Guest通过虚拟的DHCP服务器获取内网(私有)IP地址;
b)Bridged Adapter;
     实际上是通过搭建虚拟网桥,将Host的物理网卡与Guest的虚拟网卡桥接,相当于通过Host的单一物理网卡,连接了一个HUB,Host和Guest都通过这个HUB连接到外网;这种方式是限制最少的模式,但是由于Guest完全暴露在外网,因此安全性方面完全依赖Guest;
c)Internal networking;
     手册上说这种方式类似Bridge,但是实际上比Bridge方式限制多多了,无法访问外网,外网也无法访问Guest,只是Guest之间可以通过相同的命名实现互访,比较安全;
d)Host-only adapter;
     这种方式比较令人困惑,个人感觉用处并不大,但是从手册上的描述来看,如果存在一个Web服务器和数据库服务器,可以只将WEB服务器暴露给外部,同时隐藏数据库服务器;

     考虑到目前HOST主机是通过3G上网卡上网,并没有一个可用的物理网卡提供给虚拟机使用,同时虚拟机需要经常访问外网下载更新包,因此采用NAT方式,搭配port forward实现Host和Guest的文件交互;
    设置NAT方式以后,在Guest中通过DHCP自动获取到的IP地址是10.0.2.15,网关地址是10.0.2.2,Host主机的无线和有线网络都处于断开状态,Host只是通过3G网卡连接互联网。

3)FTP的两种工作方式
    国内网站对于两种工作方式的描述也不少,但还是老外的一篇文章讲的最清楚,其中包括了详细的例子:
    简单来说,主动(active)和被动模式(passive),在建立控制链接(PORT 21)的时候,没什么区别,区别只在于建立数据链接的时候,主动模式的连接是从服务端的PORT20发起,到客户端的随机端口(端口由客户端软件指定);被动模式的连接是从客户端的随机端口发起,到服务端的随机端口(端口由服务端软件指定)。
    在配置端口映射 port forward的时候,两种方式都能够正常工作,但是配置方法有很大区别,后面的篇幅将详细描述两种配置方法

4)FTP软件的选择
    FTP客户端软件的选择比较多,cuteftp/flashfxp等商业软件,个人比较喜欢开源的file zilla,该有的功能基本上全有,支持比较复杂的配置,界面也说不上难看。
   FTP服务端的软件,我用过的不算多,但是考虑到配置的灵活性,选择了Proftpd,后面有针对proftpd配置的描述。
   客户端和服务端的FTP软件安装都不复杂,采用操作系统的默认安装方式就可以,ubuntu下apt-get install proftpd就ok了,默认配置暂时不需要修改。

5)针对主动模式(Active)的配置
a)客户端(file zilla)的配置:
   编辑->设置->连接->FTP->传输模式 ,设置为主动,取消“失败后允许返回到其他传输模式”的选择
                                                    ->主动模式,限制file zilla使用的本地端口,49100~49199,这样做是为了方便后续的观察
                                                                             主动模式IP,使用以下IP地址,10.0.2.2,这是在Guest中的网关地址,取消“本地连接不使用外部IP地址”的选择
         另外,在连接管理器中,站点的传输设置,设置为“主动”
b)服务端的配置:
   都使用默认设置即可

c)虚拟机的网络设置
   虚拟机的设置页面,网络->网络连接->高级->port forwarding,添加从Host到Guest的21端口映射,即Host 21 -> Guest 21

当使用主动模式连接时,连接过程如下:
     -首先Host发起访问Guest 21端口的连接,进行身份验证;
     -通过后,Host(file zilla)会通过PORT指令,打开Host的49100~49199端口范围内的一个随机端口,并告诉Guest;
     -Guest会使用本地的20端口,连接Host的上述随机端口,进行数据传输

  在Host和Guest上,都可以通过netstat -an查看端口连接的情况

6)针对被动模式(Passive)的配置
a)客户端(File Zilla)的配置:
          编辑->设置->连接->FTP->传输模式 ,设置为被动,取消“失败后允许返回到其他传输模式”的选择
                                                    ->被动模式,被动模式,选择“使用服务器的外部IP地址来代替”
          另外,在连接管理器中,站点的传输设置,设置为“被动”
b)服务端的配置:
   proftpd的配置文件位于/etc/proftpd/proftpd.conf
   PassivePorts 设置为49000 49009 ,这是Host访问时,建立数据链接的随机服务端口范围
   masqueradeAddress设置为127.0.0.1 ,这是Host访问时,由Guest提供给Host访问的“伪装地址”,如果不设置这个参数,则Guest返回给Host的地址就会是10.0.2.15

c)虚拟机的网络设置
        虚拟机的设置页面,网络->网络连接->高级->port forwarding,添加从Host到Guest的21端口映射,即Host 21 -> Guest 21
        另外,还需要增加49000 ~ 49009的十个端口的映射,VirtualBOX这里的设置不是很方便,不能指定端口范围,因此只能一个一个设置

当使用被动模式连接时,连接过程如下:
     -首先Host发起访问Guest 21端口的连接,进行身份验证; 这里与主动方式一样
     -通过后,Guest(proftpd)会通过PORT指令,打开Guest的49000~49009端口范围内的一个随机端口,并告诉Host(File Zilla);
     -Host会使用本地的随机端口,连接Guest(proftpd)的上述随机端口,进行数据传输

 在Host和Guest上,都可以通过netstat -an查看端口连接的情况


以上是在虚拟机(Guest)和主机(Host)上分别配置的详细步骤

阅读(24378) | 评论(1) | 转发(2) |
给主人留下些什么吧!~~

janxiliang2015-04-07 10:50:55

请问,20端口应该也需要映射把?