免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 11756 | 回复: 8
打印 上一主题 下一主题

实践:在Xen下搭建虚拟NAT网络(基本完成,测试成功) [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2007-10-07 15:46 |只看该作者 |倒序浏览
修改记录:
20071010:发现文档中iptables策略有问题,原先贴出来的策略其实是被修改过的,现在重新贴的是Dom0刚刚启动好以后的iptables策略(FORWARD链默认是DROP的)

-------------------------------------------------------------------------------------------

Xen默认使用bridge网络环境,只要eth0连接到网络上,并且有dhcp server,那么虚拟机就可以拿到ip连到网上,这一点和vmware下的bridge环境是一样的。
问题是我的本本经常使用无线网络(使用Networkmanager),这种情况下虚拟机得不到ip,dom0-N之间就无法连网,很多试验都没法做,所以想把bridge环境改成NAT环境。

1. Dom0里修改/etc/xen/xend-conf.sxp文件,把原有bridge相关设置注释掉,使用nat设置:

  1. vi /etc/xen/xend-config.sxp
  2. (network-script network-nat)
  3. #(network-script network-bridge)
  4. #(network-script network-route)

  5. (vif-script vif-nat)
  6. #(vif-script vif-bridge)
  7. #(vif-script vif-route)
复制代码


2. 虚拟机配置文件/etc/xen/rhel5_1里修改vif一行,指定IP地址,并关闭dhcp:

  1. vif = [ 'mac=00:16:3e:38:75:47, ip=10.0.0.1' ]
  2. dhcp="off"
复制代码

如果希望虚拟机通过dhcp得到ip,那么这个配置文档里写一句“dhcp = "dhcp"”,但是我现在还没有用到dhcp。

同样在虚拟机配置文件/etc/xen/rhel5_2里修改这一行,mac地址也改掉:

  1. vif = [ 'mac=00:16:3e:38:75:48, ip=10.0.0.2' ]
  2. dhcp="off"
复制代码


3. 启动虚拟机rhel5_1和rhel5_2,然后修改各自的配置文件/etc/sysconfig/network-scripts/ifcfg-eth0,设置IP地址,这里写的IP地址和上面虚拟机配置文件里指定的是相同的:
rhel5_1:

  1. # Xen Virtual Ethernet
  2. DEVICE=eth0
  3. HWADDR=00:16:3e:38:75:47
  4. ONBOOT=yes
  5. NETMASK=255.255.255.0
  6. IPADDR=10.0.0.1
  7. GATEWAY=10.0.0.254
  8. TYPE=Ethernet
复制代码


rhel5_2:

  1. # Xen Virtual Ethernet
  2. DEVICE=eth0
  3. HWADDR=00:16:3e:38:75:48
  4. ONBOOT=yes
  5. NETMASK=255.255.255.0
  6. IPADDR=10.0.0.2
  7. GATEWAY=10.0.0.254
  8. TYPE=Ethernet
复制代码


然后在虚拟机里通过/etc/init.d/network restart来重启网络,虚拟机的eth0得到指定的ip。

4. 在Dom0下看ifconfig的结果:

  1. vif1.0    Link encap:Ethernet  HWaddr FE:FF:FF:FF:FF:FF  
  2.           inet addr:10.0.0.128  Bcast:0.0.0.0  Mask:255.255.255.255
  3.           inet6 addr: fe80::fcff:ffff:feff:ffff/64 Scope:Link
  4.           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
  5.           RX packets:79 errors:0 dropped:0 overruns:0 frame:0
  6.           TX packets:29 errors:0 dropped:0 overruns:0 carrier:0
  7.           collisions:0 txqueuelen:32
  8.           RX bytes:7789 (7.6 KiB)  TX bytes:5460 (5.3 KiB)

  9. vif4.0    Link encap:Ethernet  HWaddr FE:FF:FF:FF:FF:FF  
  10.           inet addr:10.0.0.129  Bcast:0.0.0.0  Mask:255.255.255.255
  11.           inet6 addr: fe80::fcff:ffff:feff:ffff/64 Scope:Link
  12.           UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
  13.           RX packets:74 errors:0 dropped:0 overruns:0 frame:0
  14.           TX packets:33 errors:0 dropped:0 overruns:0 carrier:0
  15.           collisions:0 txqueuelen:32
  16.           RX bytes:7092 (6.9 KiB)  TX bytes:5552 (5.4 KiB)
复制代码


在两个虚拟机里修改/etc/resolv.conf文件:

  1. nameserver 202.96.209.5
复制代码


在虚拟机里向外ping域名:

  1. ping [url]www.online.sh.cn[/url]
  2. PING [url]www.online.sh.cn[/url] (218.1.64.33) 56(84) bytes of data.
  3. 64 bytes from 218.1.64.33: icmp_seq=1 ttl=243 time=2.40 ms
  4. 64 bytes from 218.1.64.33: icmp_seq=2 ttl=243 time=2.51 ms
复制代码


需要注意的地方:
1. 虚拟机里设置的网关10.0.0.254其实是不存在的,没有任何地方手工设置了这个ip地址,它也ping不通。

2. 以上实验是在我的本本eth0网卡连接网络的情况下做的,为了验证效果,我把网线拨掉,然后启用无线网卡:

  1. /etc/init.d/network stop
  2. /etc/init.d/NetworkManager start
  3. /etc/init.d/NetworkManagerDispatcher start
复制代码

NetworkManager自动连接到公司的无线网络,我再从虚拟机里ping域名,发现能够ping通,这证明虚拟NAT网络的连通性与具体的网卡无关。

3. 我没有修改Dom0上任何iptables的设置,以下是Dom0刚启动以后的iptables规则列表(没有做过任何iptables的操作):

  1. # iptables -L
  2. Chain INPUT (policy ACCEPT)
  3. target     prot opt source               destination         
  4. DROP       tcp  --  anywhere             anywhere            tcp dpts:0:1023
  5. DROP       udp  --  anywhere             anywhere            udp dpts:0:1023
  6. DROP       tcp  --  anywhere             anywhere            tcp flags:FIN,SYN,RST,ACK/SYN
  7. DROP       icmp --  anywhere             anywhere            icmp echo-request

  8. Chain FORWARD (policy DROP)
  9. target     prot opt source               destination         

  10. Chain OUTPUT (policy ACCEPT)
  11. target     prot opt source               destination         

  12. Chain RH-Firewall-1-INPUT (0 references)
  13. target     prot opt source               destination         
  14. ACCEPT     all  --  anywhere             anywhere            
  15. ACCEPT     icmp --  anywhere             anywhere            icmp any
  16. ACCEPT     esp  --  anywhere             anywhere            
  17. ACCEPT     ah   --  anywhere             anywhere            
  18. ACCEPT     udp  --  anywhere             224.0.0.251         udp dpt:mdns
  19. ACCEPT     udp  --  anywhere             anywhere            udp dpt:ipp
  20. ACCEPT     tcp  --  anywhere             anywhere            tcp dpt:ipp
  21. ACCEPT     all  --  anywhere             anywhere            state RELATED,ESTABLISHED
  22. ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:ssh
  23. ACCEPT     udp  --  anywhere             anywhere            state NEW udp dpt:netbios-ns
  24. ACCEPT     udp  --  anywhere             anywhere            state NEW udp dpt:netbios-dgm
  25. ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:netbios-ssn
  26. ACCEPT     tcp  --  anywhere             anywhere            state NEW tcp dpt:microsoft-ds
  27. REJECT     all  --  anywhere             anywhere            reject-with icmp-host-prohibited
复制代码


NAT规则:

  1. # iptables -L -t nat
  2. Chain PREROUTING (policy ACCEPT)
  3. target     prot opt source               destination         

  4. Chain POSTROUTING (policy ACCEPT)
  5. target     prot opt source               destination         
  6. MASQUERADE  all  --  anywhere             anywhere            

  7. Chain OUTPUT (policy ACCEPT)
  8. target     prot opt source               destination      
复制代码


由于FORWARD链的默认策略是DROP,造成两个虚拟机之间相互ping不通,我修改了FORWARD链的默认策略,使它接受FORWARD数据包:
  1. iptables -P FORWARD ACCEPT
复制代码

再用iptables -L命令看FORWARD链:
  1. Chain FORWARD (policy ACCEPT)
  2. target     prot opt source               destination  
复制代码


或者以追加的形式修改FORWARD链:
  1. iptables -A FORWARD -j ACCEPT
复制代码



然后两个虚拟机之间就可以ping通了:
在10.0.0.2上ping 10.0.0.1:

  1. ping 10.0.0.1
  2. PING 10.0.0.1 (10.0.0.1) 56(84) bytes of data.
  3. 64 bytes from 10.0.0.1: icmp_seq=1 ttl=63 time=905 ms
  4. 64 bytes from 10.0.0.1: icmp_seq=2 ttl=63 time=0.307 ms
复制代码

10.0.0.1也可以ping通10.0.0.2。


接下来要解决的问题是:
1. 虚拟机通过dhcp动态得到ip,而不是手工设置。

[ 本帖最后由 sailer_sh 于 2007-10-10 23:42 编辑 ]

论坛徽章:
0
2 [报告]
发表于 2007-10-07 20:28 |只看该作者
支持一下!希望能继续写下去……

论坛徽章:
0
3 [报告]
发表于 2007-10-07 21:34 |只看该作者
支持楼主
期待下文ing.......

论坛徽章:
1
荣誉版主
日期:2011-11-23 16:44:17
4 [报告]
发表于 2007-10-09 22:03 |只看该作者
Thanks for share,to be continue...Come on baby!

论坛徽章:
0
5 [报告]
发表于 2007-10-10 11:13 |只看该作者

论坛徽章:
0
6 [报告]
发表于 2007-10-11 21:59 |只看该作者
正在学习中,顶一下

论坛徽章:
0
7 [报告]
发表于 2007-10-18 20:54 |只看该作者
发现一个问题,以全虚拟方式安装的winxp,当xen使用nat网络环境时,这个虚拟机不能启动,使用bridge网络时,虚拟机可以正常启动,不知道为什么。

论坛徽章:
0
8 [报告]
发表于 2007-10-24 12:08 |只看该作者
请问楼主,虚拟系统里配置的nameserver 202.96.209.5,这里配置的dns是真实的dns服务器吗?就是说你的宿主系统的dns配置的也是这个?

论坛徽章:
0
9 [报告]
发表于 2007-10-24 16:29 |只看该作者
原帖由 ykp2000 于 2007-10-24 12:08 发表
请问楼主,虚拟系统里配置的nameserver 202.96.209.5,这里配置的dns是真实的dns服务器吗?就是说你的宿主系统的dns配置的也是这个?


是的,这个ip是真实的ip,是上海热线的dns,在虚拟机里配置这个dns主要是因为虚拟机要连internet。
domain0的dns也是这个。
domain0和虚拟机的dns配置并不要求完全相同,也可以各有各的dns设置。
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP