Я использую облачную службу и пытаюсь настроить 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, сервер кеширования лака и т. д.
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
iptables для простого MASQUERADE настраивается с помощью этого скрипта:
/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
и я могу пропинговать 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:
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
и tcpdump на vm1 показывает только DNS-запрос, никакие пакеты не принимаются (ни отбрасываются ядром, которое остается на 0) шлюзом vm для запроса ICMP к www.google.it.
на vm2 ip DNS в resolv.conf, очевидно, 192.168.100.20, то есть vm1
другой сценарий, если я просто попытаюсь пропинговать шлюз:
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
Я спросил у облачного хостера, применяется ли какой-либо фильтр, они сказали, что это не ошибка их стороны, и никакие фильтры не применяются.
Любая помощь очень ценится.