我使用云服务,并尝试在两个虚拟机之间设置 NAT。我从未在这个简单的步骤中遇到过问题,但这次不同,我几乎要放弃了。
第一个虚拟机有两个接口:
eth0 Link encap:Ethernet HWaddr 00:16:3e:dc:0d:77
inet addr:95.141.xx.xx Bcast:95.141.xx.255 Mask:255.255.254.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:705379 errors:0 dropped:19373 overruns:0 frame:0
TX packets:495549 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
eth1 Link encap:Ethernet HWaddr 00:16:3e:29:27:84
inet addr:192.168.100.20 Bcast:192.168.103.255 Mask:255.255.252.0
UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1
RX packets:643381 errors:0 dropped:18631 overruns:0 frame:0
TX packets:513203 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:1000
它运行 bind9、varnish 缓存服务器等等。
root@varnish:/etc/bind# nslookup
> server 127.0.0.1
Default server: 127.0.0.1
Address: 127.0.0.1#53
> www.google.com
Server: 127.0.0.1
Address: 127.0.0.1#53
Non-authoritative answer:
Name: www.google.com
Address: 74.125.225.81
一个简单的 MASQUERADE 的 iptables 使用这个脚本配置:
/sbin/iptables -t nat -F ; /sbin/iptables -F
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -I FORWARD 1 -i eth1 -j ACCEPT
iptables -I FORWARD 1 -o eth0 -j ACCEPT
我可以 ping 通 VM2:
root@varnish:~# ping 192.168.100.18
PING 192.168.100.18 (192.168.100.18) 56(84) bytes of data.
64 bytes from 192.168.100.18: icmp_seq=1 ttl=64 time=0.444 ms
另一边我们有另一个虚拟机,它只有一个接口:
eth0 Link encap:Ethernet HWaddr 00:16:3e:aa:6f:04
inet addr:192.168.100.18 Bcast:192.168.103.255 Mask:255.255.252.0
以及正确的路由表:
Kernel IP routing table
Destination Gateway Genmask Flags Metric Ref Use Iface
default 192.168.100.20 0.0.0.0 UG 0 0 0 eth0
192.168.100.0 * 255.255.252.0 U 0 0 0 eth0
root@nginx1:~#
当我尝试从 vm2 ping 世界时:
root@nginx1:~# ping www.google.it
PING www.google.it (74.125.225.87) 56(84) bytes of data.
^C
--- www.google.it ping statistics ---
10 packets transmitted, 0 received, 100% packet loss, time 0ms
并且,vm1 上的 tcpdump 仅显示 DNS 请求,网关 vm 没有收到针对 www.google.it 的 ICMP 请求的数据包(也没有被内核丢弃,保持为 0)。
在 vm2 上,resolv.conf 中的 DNS ip 显然是 192.168.100.20,即 vm1
如果我尝试 ping 网关,情况会有所不同:
root@nginx1:~# ping 192.168.100.20
PING 192.168.100.20 (192.168.100.20) 56(84) bytes of data.
64 bytes from 192.168.100.20: icmp_seq=1 ttl=64 time=0.388 ms
64 bytes from 192.168.100.20: icmp_seq=2 ttl=64 time=0.921 ms
我询问过云托管商是否应用了任何过滤器,他们说这不是他们的错误,并且没有应用任何过滤器。
非常感谢您的帮助。