QQ登录

只需一步,快速开始

 找回密码
 注册

QQ登录

只需一步,快速开始

查看: 6414|回复: 22

Vmware虚拟机的网络设置高级篇

[复制链接]
发表于 2005-1-25 11:57:52 | 显示全部楼层 |阅读模式
Vmware虚拟机的网络设置(三) [高级篇]


作者: 顾翠文 [GuCuiwen] email:[email protected]

版权声明:
1,本文档可以在网络上在非商业范围内自由转载,转载请注明出处.
2,如果转载版面(包括文章标题所在版面)包含商业广告,请向作者支付至少每千字100园的稿费.
3,以书面,书籍形式转载和出版请按至少每千字100园人民币的标准向作者支付稿费 .
4,转载请注明出处,并保留原作者及本版权申明.
5,不同意以上版权申明的请勿转载,否则将在法律范围内追究最大责任.
6,本文最初贴于www.linuxfans.org 其他地方均为转载.


先前写过两篇关于vmware虚拟机网络设置的文章,但是由于当时对vmware虚拟机网络的理解有限,文章中有些错误并且不太完善,由于工作的关系这两天又用到虚拟机并且设置虚拟机网络,通过实践总结出了比较完善的虚拟机网络解决方案.下面以笔者实际遇到的问题和解决方案为例,讲解一下vmware虚拟机网络设置中比较高级的部分.比较初级的网络设置请查看笔者先前写的两篇文章,可以在www.linuxfans.org论坛的系统安装板块的精华区找到.阅读本文应当具备TCP/IP网络中关于网络路由的基本知识.本文将不再阐述原理,而重点将设置过程,具备相关网络知识的读者可以很容易理解那样设置的原因.


Vmware 虚拟机设置网络的时候通常都用bridge方式和NAT方式,因为这两种方式比较简单,无论是虚拟机和主机通信还是和外网通信,实现起来都比较容易,适合初学者.当我们用host-only的方式联网的时候和主机的通信很简单,但是和外网通讯却要借助额外的路由软件,设置路由需要具备相关的专业知识才能设置成功,但是你一旦理解和掌握了这种方式网络通信,你能根据需要配置出很复杂的虚拟网络.下面以实际案例来说明用host-only方式来设置 bridge和NAT方式不能完成的复杂网络.


#####################

# 一,案例需求

#####################


如下图所示:



1) 简单说明:


其中,host-A和host-B是两台真实主机,他们通过交换机连网关,网关是由一台装有linux的PC机担任的,这两台真实主机都可以通过网关连上Internet.

图中的小方框表示网卡,其中虚线表示虚拟网卡,实线表示真实网卡.

图中的中方框表示虚拟主机,虚拟主机用vm-host-1,vm-host-2,vm-host-3表示,每台真实主机中有三台虚拟机.


为了说明方便,我做如下文档约定:

对于host-A里的虚拟设备(包括虚拟机本身)我统一在最后加后缀A.

如host-A中的虚拟机vm-host-1用vm-host-1.A表示,vm-NIC1用vm-NIC1.A表示.

真实主机host-B中也遵循这种规则.


2) 真实网络设置情况:


host-A和host-B均只有一块网卡,软件配置如下表:



在没有装虚拟系统前,两台真实主机均能正常通过网关上Internet.


3) 网络需求:


(a) 在虚拟机网络配置好后真实主机均能和原来一样正常上Internet.


(b) 虚拟机vm-host-1.A,vm-host-2.A和vm-host-3.A均能和host-A,host-B通信,并且和vm-host-1.B,vm-host-2.B和vm-host-3.B通信.


(c) 虚拟机vm-host-1.B,vm-host-2.B和vm-host-3.B均能和host-B,host-A通信,并且和vm-host-1.A,vm-host-2.A和vm-host-3.A通信.


(d) 各个虚拟机均能上Internet.


综上所诉,此虚拟机网络要求所有主机之间,不管是虚拟主机还是真实主机均能通信,所有主机,不管是真实主机还是虚拟主机均能上网.


对于这样复杂的网络设置,只有通过vmware提供的host-only网络功能,配合windows 2000 server的'路由和远程访问'功能以及linux提供的路由功能(把ip_forward值设置为1)才能完成.

其实host-only是最简单的,他把虚拟主机看成一台独立的主机,vmware内部并不提供其他功能使得他与外界通信,但也正因为他的简单,才更加的灵活,我们才有可能用他来塑造复杂的虚拟网络.


############################

# 二, 同一主机中的虚拟机通信

############################


这种形式的虚拟主机间的通信最简单,就像平时设置局域网那样,只要把这些虚拟主机的IP地址设在同一网段就行了.但是,为了进一步和外部通信,应该把他们的 IP地址设置成和vmnet1同一个网段并且虚拟系统均用host-only方式和主机联网,vmnet1是vmware虚拟机中实现host-only 方式联网的虚拟网络设备,他的IP地址在安装vmware的时候随机分配,你也可以在安装完之后手动设置他的IP地址.从图中可以看出,vmnet1,其实的作用类似于一个交换机,他和真实主机内所有的虚拟主机联接起来.在我先前写的文章中,我把vmnet1和vmnet8说成是虚拟网卡,其实这种说法是不准确的,更确切的说法是一个具有IP地址的交换机.在vmware的官方文档中也有提到这个问题,文档中也说明了vmnet1是一个虚拟网络,其实就是一个交换机.笔者在host-A上安装vmware4.5workstation的时候vmnet1的地址被随机分配为为 192.168.19.1.host-B上的vmnet1IP地址被随机分配为172.16.79.1.0


因此,我做如下设置:

vmnet1.A 192.168.19.1 255.255.255.0 (自动分配的)

vm-host-1.A 192.168.19.101 255.255.255.0

vm-host-2.A 192.168.19.102 255.255.255.0

vm-host-3.A 192.168.19.103 255.255.255.0


vmnet1.B 172.16.79.1 255.255.255.0 (自动分配的)

vm-host-1.B 172.16.79.101 255.255.255.0

vm-host-2.B 172.16.79.102 255.255.255.0

vm-host-3.B 172.16.79.103 255.255.255.0


经过以上设置后host-A中的三台虚拟机能相互通信,并且通过vmnet1.A和host-A通信,但是不能ping通host-A的真实网卡的IP地址192.168.109.6.

同样,host-B中的三台虚拟机能相互通信,并且通过vmnet1.B和host-B通信,但是不能ping通host-B的真实网卡的IP地址192.168.109.6.


#####################################

# 三,虚拟网络和真实网络以及虚拟机之间通信

######################################


以上只不过完成了最简单的虚拟机通信,远不能达到要求.因此我们要配合windows 2000 server的'路由和远程访问'功能以及linux提供的路由功能来设置路由,使得host-A和host-B分别成为一台路由器.用来联接虚拟网络和真实网络.


在windows 2000 server中,可以用'路由和远程访问'服务来使得host-A成为一台联接虚拟网络和真实网络的路由器.


具体方法:

开始菜单->程序->管理工具->路由和远程访问

打开路由和远程访问控制台,如果菜单中没有路由和远程访问则说明你在安装系统的时候没有装,你需要利用控制面板添加删除程序来添加这个功能.注意,此功能只有windows 2000 server以上的版本和windows 2003 才有.windows 2000 professional和windowsXP均无此功能(可以安装其他路由软件来实现).


设置路由使得vmnet1和host-A上的真实网卡互连.请注意,不是设置NAT联接,而是设置纯粹的静态路由联接两个网络.


此外,还要把vm-host-1.A的网关设置为vmnet1.A的IP地址,即:

vmnet1.A 192.168.19.1 255.255.255.0 网关设置为空

vm-host-1.A 192.168.19.101 255.255.255.0 192.168.19.1

vm-host-2.A 192.168.19.102 255.255.255.0 192.168.19.1

vm-host-3.A 192.168.19.103 255.255.255.0 192.168.19.1


设置好后做测试:

在vm-host-1.A中ping host-A的真实网卡:


c:\>ping 192.168.109.6 此时应该已经可以ping通.如果不通则说明'路由和远程联接'没有设置好,host-A还没有扮演一台路由器的功能.请重新设置'路由和远程联接'.


ping host-A的真实网卡成功后再ping host-B的真实网卡应该不能ping通!


为什么不通呢?

因为host-A的默认网关是LAN-gateway的地址,即192.168.109.254

假设vm-host-1.A ping 192.168.109.64 (host-B). 数据包的行走路线是这样的:


数据包到vm-host-1.A的默认网关vmnet1(192.168.19.1),经过win2000server路由后到host-A的真实网卡 NIC1,因为host-A的真实网卡NIC1(192.168.109.6)的地址和host-B的真实网卡NIC2在同一个网段,因此实际上数据包已经到了host-B的真实网卡.但是host-B的真实网卡收到消息后需要把ICMP消息反回给vm-host-1.A,但是host-B上却没有到vm -host-1.A的路由,此时,host-B上只有一个默认网关(192.168.109.254),他不知道如何把数据包送回vm-host-1.A 的路径.因此返回ICMP消息失败.在vm-host-1.A上显示超时.因此,明白了这一点我们就知道了只要在host-B上加上到vm-host- 1.A的路由,host-B就知道了如何向vm-host-1.A反回ICMP消息.


因此在host-B上加上到vm-host-1.A的路由(同样也能到vm-host-2.B和 vm-host-3.A)


linux下设置路由的命令:

#route add -net 192.168.19.0/24 gw 192.168.109.6

这个指令告诉host-B,凡是发到192.168.19.0网段的数据全部经192.168.109.6发出而不是经过默认网关192.168.109.254发出.

而192.168.109.6和192.168.109.64在同一个网段,所以可以通信,而192.168.109.6又是通向192.168.19.0网络(即host-A上的虚拟网络)的路由器,因此数据包能顺利到达.


如果学习过TCP/IP和有关路由方面的知识,就不难理解以上的内容.



这样,我们就完成了host-A中的虚拟主机和真实网络中的某一台真实主机通信.如果host-A中的虚拟主机还想和真实网络中的另一台主机host-C通信,则必需在host-C上也设置通往vmnet1.A网络的路由.


经过以上设置,虚拟虚拟网络可以和真实网络通信了,但是不同主机间的虚拟网络还不能通信.

因此,还要用同样的方法设置host-B中的虚拟主机,即:


vmnet1.B 172.16.79.1 255.255.255.0 网关为空

vm-host-1.B 172.16.79.101 255.255.255.0 172.16.79.1

vm-host-2.B 172.16.79.102 255.255.255.0 172.16.79.1

vm-host-3.B 172.16.79.103 255.255.255.0 172.16.79.1


同样的原理,我们还要在host-A上设置到vmnet1.B虚拟网络的路由.


在windows2000 server上设置路由的命令:


c:\>route add 172.16.79.0 mask 255.255.255.0 192.168.109.64


即告诉windows2000路由器凡是目标地址为172.16.79.0网络的数据包都经过192.168.109.64主机(即host-B转发),host-B和host-A在同一个网络中,host-B又是vmnet1.B的路由器,因此数据能顺利到达.


当然,别忘了把host-B设置成为一台静态路由器.在linux中打开路由功能非常简单,用一条命令即可:


#echo “1” >/proc/sys/net/ipv4/ip_forward


通过上面的设置,两台真实主机中的虚拟主机均能访问对方的真实主机,并且可以访问对方的虚拟主机,即vm-host-1.A和vm-host-1.B能相互通信.此时的真实网络和虚拟网络间的拓扑图如下:




让我们理一下思路:

假设vm-host-1.A和vm-host-1.B通信,由vm-host-1.A首先发起连接,数据包经过vm-host-1.A的网卡vm-NIC1(192.168.19.101)经过vm-host-1.A的网关vmnet1 (192.168.19.1),到达windows 2000 server,由于此时windows 2000 server是一台路由器,因此,他负责把来自vmnet1的数据包发到host-A的真实网卡NIC1,通俗的说,就是把来自虚拟网络A的数据包搬到真实网络网络.数据包在windows 2000 server上等待发出前,路由器首先判断发送该数据包的路径.通过检测数据包中的目标IP地址(即vm-hsot-1.B的IP地址 172.16.79.101),他知道这个数据包是发送到网络172.16.79.0的,通过路由表,他得知,发到这个网络的数据应该经过 192.168.109.64这个地址,即host-B,这样数据包就通过真实网络被发到host-B上,同样,host-B也是一台路由器,他也要对来自其他网络的数据包进行分析然后判断发送的目的地,经过查看数据包的目的地址,他发现,这个数据包的目的网络是192.16.79.0,这个网络是属于自己管辖的,通过vmnet1.B就能到达.于是,他把数据包发到vmnet1.B,即数据包从真实网络被搬到了host-B中的虚拟网络.vmnet1和 vm-host-1.B在同一个网段,可以直接到达,于是vm-host-1.B收到了数据包.


同样的过程,vm-host-1.B会将数据包发到vm-host-1.A中.完成两台分布在不同真实主机中的虚拟机通信.


这些功能已经完成了大部分需求.接下来就来设置虚拟机和Internet联接!


##############################

# 四,虚拟机和Internet通信

##############################


如果能理解并设置成功前两步的设置,那么这一步的设置就比较简单了,通过分析数据包的走向,我们知道,只要在网关LAN-gateway上设置到 vmnet1.A和到vmnet1.B的路由就能让虚拟机和LANgateway通信.只要能和网关通信了,就能和Internet通信了.


在linux网关上添加路由:


#route add -net 192.168.19.0/24 gw 192.168.109.6

#route add -net 172.16.79.0/25 gw 192.168.109.64


因为LANgateway已经是一台NAT路由了,所以不需要设置ip_forward的值了,这个值已经是1了.


在虚拟机中设置好DNS,就可以直接和Internet通信了.


至此,我们完成了需求中的全部功能.


[/img]
发表于 2005-2-3 00:37:51 | 显示全部楼层
感谢gucuiwen给我们带来这么好的文章!!!

----------------------
gucuiwen兄:

   几天来.我一直在"您的带领下"认真学习vmware的配置,受益菲浅.
你的前几个文章我都读过了,有些问题需要请你解疑,不知可否!

我的配置是这样的:

  主机:redhatlinux9  ,虚拟机:win2000pro

我在此环境下已经成功配置了NAT方式,主机和虚拟机实现了联接和互相访问以及上internet.

但是我在配置host-only模式的时候,出现了问题,我先说下我的设置:

我的host-only模式的真实主机里的虚拟网卡是vmnet2,我重新设置vmware(第一次安装时没有设置好)的时候提示我说vmnet1的IP被samba服务占了,所以host-only为vmnet2.

具体内容:

1:linux:
--------------
vmnet1    Link encap:Ethernet  HWaddr 00:50:56:C0:00:01
          inet addr:172.16.176.1  Bcast:172.16.176.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

vmnet2    Link encap:Ethernet  HWaddr 00:50:56:C0:00:02
          inet addr:192.168.5.1  Bcast:192.168.5.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:161 errors:0 dropped:0 overruns:0 frame:0
          TX packets:61 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

vmnet8    Link encap:Ethernet  HWaddr 00:50:56:C0:00:08
          inet addr:172.16.120.1  Bcast:172.16.120.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:102 errors:0 dropped:0 overruns:0 frame:0
          TX packets:15 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
-------------
2:配置好的win2000pro:
-----------------
IP address:192.168.5.2
subnet mask:255.255.255.0
default gateway:192.168.5.1
dns servers:192.168.5.1
------------------
.
3:经过上述设置后可以互相ping通对方.

4:然后我想设置路由,用命令行:

#route add -net 192.168.5.0/24 gw 192.168.5.2

可是命令后似乎没有什么反应!
然后我用:
#service network restart

5:然后我在虚拟的win2000pro下,用IE上互联网,连不通,用ping:
ping www.163.com
uknow host www.163.com
但是主机和虚拟机是可以ping通的.


我的问题是:
1:请问我的设置上有没有错误?
(自我感觉可能错在路由命令上面了!)
2:如果能实虚拟的win2000pro,上互联网的话,它的IP是否还是真实主机的IP?


不知道我是否表达清楚?
希望gucuiwen兄帮助小弟!不胜感激!
回复

使用道具 举报

发表于 2005-2-3 00:41:28 | 显示全部楼层
补充:
--------------
[root@localhost /]# route
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
172.17.0.1      *               255.255.255.255 UH    0      0        0 ppp0
192.168.5.0     *               255.255.255.0   U     0      0        0 vmnet2
172.16.176.0    *               255.255.255.0   U     0      0        0 vmnet1
172.16.120.0    *               255.255.255.0   U     0      0        0 vmnet8
169.254.0.0     *               255.255.0.0     U     0      0        0 lo
127.0.0.0       *               255.0.0.0       U     0      0        0 lo
default         172.17.0.1      0.0.0.0         UG    0      0        0 ppp0
-------------------------
回复

使用道具 举报

 楼主| 发表于 2005-2-3 12:19:20 | 显示全部楼层
你的表述很清楚,我明白了你的意思.

你的设置错误有如下几点:

1,虚拟机的DNS设置错误

DNS是解析域名用的,是internet上的专门负责域名到IP地址转换的服务器
而不应该是你自己的主机,(即不是vmnet2的地址).我不知道你的主机是用什么方式
上网的,如果是用ADSL拨号或者modem拨号,那么主机会自动获取IP地址DNS网关等信息.虚拟机的dns可以用和主机相同的地址,也可以随便自己设置一个internet上真实存在的DNS服务器地址.
比如上海热线的dns服务器 202.96.209.5 202.96.209.6 202.96.209.133
这是国内最常用的dns服务器地址,比较稳定.

2, route命令设置后直接生效是保存在内存中的,不应该重起网络服务

用route设置网关后直接在内核的TCP/IP协议栈里生效了,用service重起网络服务的话,他会读取硬盘上的配置文件,重新设定网络配置,因此在设置网关后不应该重起网络服务,重起后要重新设置网关.通常为了重起电脑后生效,会把route命令写在/etc/rc.d/rc.local文件中.

另外,当位于两个真实主机中的虚拟机通信时才需要设置网关,你的情况不需要设置.

3,host-only方式只把虚拟机看成单独的只有一块独立网卡的电脑.
不提供NAT转换机制.

如果你用bridge或者nat方式,虚拟机内部提供了机制来和主机共享一个internet地址上网.但是用host-only方式没有这种机制,因此要在主机上用主机的nat软件来实现.在win2k中用路由和远程访问.在linux中用linux内核的nat功能.

在你的linux主机中做如下设置:

echo "1" >/proc/sys/net/ipv4/ip_forward

也可以把/etc/sysctl.conf中的net.ipv4.ip_forward = 0
该成net.ipv4.ip_forward = 1 这样就不用每次起动电脑都该了.

然后用iptables设置内核nat表,使主机成为nat路由器,让虚拟机共享主机的IP地址上internet.

如果是固定IP地址上网就这样:

#iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to xxx.xxx.xxx.xx (你的主机IP地址)


如果是拨号上网(IP地址不固定)就这样:

#iptables -t nat -A POSTROUTING -o ppp+ -j MASQUERADE

这样你的虚拟机就可以上网了.

bridge和NAT方式的vmnet由vmware内部提供这种功能,所以直接可以上.
而host-only对vmware来说很简单,他不提供于主机共享一个internetIP的功能
因此,对用户来说就不简单了.需要自己手工来设置,也许要懂得相关的专业知识.
但是,正是这样,host-only才具有更大的灵活性,完成更复杂的功能.
学习有关NAT方面的知识后,就不难理解.

redhat 9中运行vmware4.5.2安装freebsd5.2.1系统通过以上方法上internet的截图:

回复

使用道具 举报

发表于 2005-2-3 14:47:39 | 显示全部楼层
昨晚做梦都配置vmware呢?


非常高兴看到了gucuiwen兄的详细回复!

可是我资质太差,理解上有些吃力,有些疑惑:

1:关于DNS设置:

我的上网方式是本地电信的ADSL.
我看了gu兄对文章后,将原来设置的DNS设置:192.168.5.1(vmnet2) 取消掉了,写是了本地电信和gu兄提供的上海热线的DNS服务器地址,进行测试(这里还依照gu兄的文章在主机redhatlinux9上面执行了2个命令:[命令没有做任何更改]
# echo "1" >/proc/sys/net/ipv4/ip_forward
# iptables -t nat -A POSTROUTING -o ppp+ -j MASQUERADE


),但都没有测试成功,还是 无法ping通www.163.com.

2:关于route:

根据gu兄的文章,我没有设置网卡路由.但我设置完后(没有测试成功)试了下这个命令,和前面贴子里的内容是一样的.

3:关于host-only模式,在redhatlinux下的设置:

我主要是运行了以下这2个命令(并且没有做任何改变):

# echo "1" >/proc/sys/net/ipv4/ip_forward
# iptables -t nat -A POSTROUTING -o ppp+ -j MASQUERADE

最后在虚拟win2000pro里ping www.163.com,ping不通(更无法在虚拟机里上网了).
但是虚拟机和主机可以互相ping通.

关于这2个命令,我有点疑问:
1):echo "1" 中的"1"能不能改成"2",因为我是用vmnet2这个虚拟网卡host-only模式的,这样可以吗?gu兄?
2):后一条命令里的MASQUERADE不知道什么意思?
3):我的这个文件里/proc/sys/net/ipv4/ip_forward,全部内容只有个数字1.
我在这个文件里/etc/sysctl.conf,没有发现任何内容,是空白的,所以也就无法想gu兄说的那样

"也可以把/etc/sysctl.conf中的net.ipv4.ip_forward = 0
该成net.ipv4.ip_forward = 1 这样就不用每次起动电脑都该了."

修改这个文件了.

4:关于ping;

我想问下gu兄,是不是不管什么方式,brige,nat,host-only,主机和虚拟机都是可以ping通的吗?

5:最后我对我的选择虚拟网卡起了怀疑:

这个是安装配置vmware的时候的内容:
-----------
Do you want to be able to use host-only networking in your virtual machines?
[yes] yes

The following hostonly networks have been defined:

. vmnet1 is a host-only network on private subnet 172.16.176.0.  This network
has a Samba server running to allow virtual machines to share the host's
filesystem.

Do you wish to configure another host-only network? (yes/no) [no] yes

Configuring a host-only network for vmnet2.

Do you want this program to probe for an unused private subnet? (yes/no/help)
[yes]

Probing for an unused private subnet (this can take some time)...

The subnet 192.168.5.0/255.255.255.0 appears to be unused.

The following hostonly networks have been defined:

. vmnet1 is a host-only network on private subnet 172.16.176.0.  This network
has a Samba server running to allow virtual machines to share the host's
filesystem.
. vmnet2 is a host-only network on private subnet 192.168.5.0.
------------------
以下是ifconfig的内容(目前):
--------------------
[root@localhost root]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0A:EB:1B:E5:8E
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:10244 errors:0 dropped:0 overruns:0 frame:0
          TX packets:7803 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:9377221 (8.9 Mb)  TX bytes:1024367 (1000.3 Kb)
          Interrupt:11 Base address:0xb000

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:3610 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3610 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:188396 (183.9 Kb)  TX bytes:188396 (183.9 Kb)

ppp0      Link encapoint-to-Point Protocol
          inet addr:我的公网IP  P-t-P:172.17.0.1  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1
          RX packets:56 errors:0 dropped:0 overruns:0 frame:0
          TX packets:56 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:3372 (3.2 Kb)  TX bytes:4235 (4.1 Kb)

vmnet1    Link encap:Ethernet  HWaddr 00:50:56:C0:00:01
          inet addr:172.16.176.1  Bcast:172.16.176.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

vmnet2    Link encap:Ethernet  HWaddr 00:50:56:C0:00:02
          inet addr:192.168.5.1  Bcast:192.168.5.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:198 errors:0 dropped:0 overruns:0 frame:0
          TX packets:19 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

vmnet8    Link encap:Ethernet  HWaddr 00:50:56:C0:00:08
          inet addr:172.16.120.1  Bcast:172.16.120.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)
-----------------------------

我选择的 是vmnet2做host-only模式,不知道对不对呢?

希望还能得到gucuiwen兄的指导和帮助,切盼!
回复

使用道具 举报

 楼主| 发表于 2005-2-3 17:35:38 | 显示全部楼层
主要问题还是没有在主系统上成功设置NAT (iptables命令上)

# echo "1" >/proc/sys/net/ipv4/ip_forward
这条命令中的1表示打开linux的路由功能,只有0和1两个数字可以选择(0表示关闭linux路由功能)

如果你没有/etc/sysctl.conf文件,那么可以自己建立一个然后把
net.ipv4.ip_forward = 1
写进去.

# iptables -t nat -A POSTROUTING -o ppp+ -j MASQUERADE
这条命令中的ppp+表示所由以ppp开头的网络接口,如果你是adsl拨号这个接口名应该是pppoe,如果你是小猫拨号,上面的这条命令应该已经可以了.
你可以尝试一下这个命令是否能成功:
# iptables -t nat -A POSTROUTING -o pppoe -j MASQUERADE

把你的ifconfig信息全部贴出来让我看看.

另外,加入是ADSL拨号,你的ADSL猫是是什么模式工作的?是桥接模式还是NAT模式?
如果你没有设置过那么肯定是桥接模式,那么桥接后你的主系统网卡的地址是什么?

默认情况下ADSL猫的网卡IP都是是192.168.1.1连电话线的那个口的IP拨号的时候自动获得
即internet IP.我推断你的计算机上的网卡应该是192.168.1.x (x为2以上的数字.)

那么你应该这样设置iptables:

#iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 192.168.1.x

总之把你的主系统连上internet以后的ifconfig的所有信息贴出来,否则我没办法帮助你.

如果要深入学习linux,就一定要学习计算机网络,操作系统原理等专业课程.
这些都是内功,有了内功再学这些东西就快了,因为知道了原理. 没什么资质好坏的问题.
你只是缺少计算机专业基础知识.
回复

使用道具 举报

发表于 2005-2-4 02:36:31 | 显示全部楼层
刚刚用vm装了fedora,
学习一下,,,
回复

使用道具 举报

发表于 2005-2-5 12:20:11 | 显示全部楼层
谢谢gu兄!

以下是我的ifconfig信息:
----------------
[root@localhost root]# ifconfig
eth0      Link encap:Ethernet  HWaddr 00:0A:EB:1B:E5:8E
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:2940 errors:0 dropped:0 overruns:0 frame:0
          TX packets:3004 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:1981355 (1.8 Mb)  TX bytes:558489 (545.3 Kb)
          Interrupt:11 Base address:0xb000

lo        Link encap:Local Loopback
          inet addr:127.0.0.1  Mask:255.0.0.0
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:584 errors:0 dropped:0 overruns:0 frame:0
          TX packets:584 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0
          RX bytes:30282 (29.5 Kb)  TX bytes:30282 (29.5 Kb)

ppp0      Link encapoint-to-Point Protocol
          inet addr:61.178.147.17  P-t-P:172.17.0.1  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1
          RX packets:2860 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2913 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:1913565 (1.8 Mb)  TX bytes:488883 (477.4 Kb)

vmnet1    Link encap:Ethernet  HWaddr 00:50:56:C0:00:01
          inet addr:172.16.176.1  Bcast:172.16.176.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

vmnet2    Link encap:Ethernet  HWaddr 00:50:56:C0:00:02
          inet addr:192.168.5.1  Bcast:192.168.5.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

vmnet8    Link encap:Ethernet  HWaddr 00:50:56:C0:00:08
          inet addr:172.16.120.1  Bcast:172.16.120.255  Mask:255.255.255.0
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:0 (0.0 b)  TX bytes:0 (0.0 b)

[root@localhost root]#
--------------------------------------
我已经 在目前这个系统上成功的设置过NAT,用的就是vmnet8.(主机是redhatlinux9,虚拟机是win2000pro).

# iptables -t nat -A POSTROUTING -o pppoe -j MASQUERADE
这个命令没有成功.

我不太清楚我的ADSL猫是用什么模式工作的,也没有设置过,按照gu兄说的,应该是默认的吧.
我的猫的地址是不是在这里呢?
----------------------------------
ppp0      Link encapoint-to-Point Protocol
          inet addr:61.178.147.17  P-t-P:172.17.0.1  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1492  Metric:1
          RX packets:2860 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2913 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3
          RX bytes:1913565 (1.8 Mb)  TX bytes:488883 (477.4 Kb)
----------------------------------
是172.17.0.1?

还有我有点糊涂了,那里看主系统网卡的地址呢?


谢谢!
回复

使用道具 举报

 楼主| 发表于 2005-2-5 12:55:10 | 显示全部楼层
拨号上网以后尝试用以下这条命令:

#iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

运行以上命令前先清除系统默认的设置(或者先前的设置):
#iptables -t nat -F
#iptables -F

如果上面的命令不行,就用下面的命令:
#iptables -t nat -F
#iptables -F
#iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to xxx.xxx.xxx.xx

(xxxx.xxx.xxx.xx是指你拨号上网后ppp0的ip地址)

从你的ifconfig信息看出你的ADSL是桥接(默认)模式上网的,因此eth0上看不到IP地址

eth0就是你主系统上的网卡.

最后别忘了打开linux路由功能
#echo "1" >/proc/sys/net/ipv4/ip_forward

如果以上都尝试了还是不性的话,我怀疑是vmnet2的问题了,请重新设置vmware网络
(运行vmware-config.pl)
用vmnet1的host-only来尝试.
回复

使用道具 举报

 楼主| 发表于 2005-2-5 12:59:25 | 显示全部楼层
实在不行的话,你说个时间,你把你电脑上的ssh服务打开( #service sshd start )
把用户名和密码还有拨号上网后得到的IP地址发到我的信箱里,
我远程登录上你的系统帮你设置.

先要清一下防火墙

#iptables -F
#iptables -X
回复

使用道具 举报

发表于 2005-2-5 13:35:21 | 显示全部楼层
gu兄,我已经给你发短消息了,,,,用户名,密码,IP,都在这里呢

你回下贴,我就停防火墙,,,好吗?


我的QQ:47727034
回复

使用道具 举报

 楼主| 发表于 2005-2-5 13:47:07 | 显示全部楼层
我已经看到了.
回复

使用道具 举报

 楼主| 发表于 2005-2-5 13:49:12 | 显示全部楼层
我已经登上你的系统
用who命令可以看到我,用write命令可以和我通话.
回复

使用道具 举报

发表于 2005-2-5 13:49:34 | 显示全部楼层
防火墙关了,sshd启动了,gu兄,来吧
回复

使用道具 举报

 楼主| 发表于 2005-2-5 13:56:57 | 显示全部楼层
qq 64333143 现在开着,可以加我.
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

GMT+8, 2024-11-15 00:17 , Processed in 0.065751 second(s), 15 queries .

© 2021 Powered by Discuz! X3.5.

快速回复 返回顶部 返回列表