Назад | Перейти на главную страницу

Простой MASQUERADE NAT между 2 ВМ

Я использую облачную службу и пытаюсь настроить 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

Я спросил у облачного хостера, применяется ли какой-либо фильтр, они сказали, что это не ошибка их стороны, и никакие фильтры не применяются.

Любая помощь очень ценится.