У меня есть две виртуальные машины под управлением CentOS 7 со следующими конфигурациями ifconfig :

VM1: ifconfig
eth0: public ip
eth0:0: LAN IP 172.22.xx.x1

VM2: ifconfig
eth0: no public ip
eth0:0: LAN IP 172.22.xx.x2

И я хочу, чтобы VM2 доступ к Интернету. Есть идеи, как этого добиться?

Я пробовал каждую комбинацию iptables POSTROUTING, PREROUTING, FORWARD, DNAT, SNET и route вы можете придумать безрезультатно. Я должен делать что-то не так.

У кого-нибудь есть простой пример, как этого добиться?

Чтобы проверить внешний доступ к VM2 , я пингую www.google.com (и IP), но получаю неизвестный хост и 100% потери пакетов соответственно.

РЕДАКТИРОВАТЬ - Больше информации

Запуск tcpdump -nni eth0:0 icmp на VM1 и ping 8.8.8.8 на VM2 дает следующие результаты:

09:28:05.957841 IP VM2 private ip > 8.8.8.8: ICMP echo request, id 13950, seq 6, length 64
09:28:05.957900 IP VM1 public ip > 8.8.8.8: ICMP echo request, id 13950, seq 6, length 64
09:28:05.959157 IP 8.8.8.8 > VM1 public ip: ICMP echo reply, id 13950, seq 6, length 64
09:28:05.959172 IP 8.8.8.8 > VM2 private ip: ICMP echo reply, id 13950, seq 6, length 64

Но VM2 не получает пакеты. Вот мой скрипт iptables для VM1:

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

# Flush tables
iptables -F
iptables -t nat -F

iptables -A FORWARD -i eth0:0 -o eth0 -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

iptables-save > /etc/sysconfig/iptables
service iptables restart

И route для VM2:

route add default gw <VM1 private ip>

РЕДАКТИРОВАТЬ 2 - Больше информации

VM2 route:

[travis@VM2 ~]$ sudo route -n
Kernel IP routing table
Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
0.0.0.0         172.22.20.195   0.0.0.0         UG    0      0        0 eth0
172.22.0.0      0.0.0.0         255.255.0.0     U     0      0        0 eth0

И VM1 iptables:

[travis@VM1 ~]$ sudo iptables -vnL
Chain INPUT (policy ACCEPT 3039 packets, 651K bytes)
 pkts bytes target     prot opt in     out     source               destination        

Chain FORWARD (policy ACCEPT 88 packets, 6598 bytes)
 pkts bytes target     prot opt in     out     source               destination        
    0     0 ACCEPT     all  --  eth0:0 eth0    0.0.0.0/0            0.0.0.0/0          

Chain OUTPUT (policy ACCEPT 2602 packets, 304K bytes)
 pkts bytes target     prot opt in     out     source               destination        

[travis@VM1 ~]$ sudo iptables -t nat -vnL
Chain PREROUTING (policy ACCEPT 114 packets, 9000 bytes)
 pkts bytes target     prot opt in     out     source               destination        

Chain INPUT (policy ACCEPT 81 packets, 6692 bytes)
 pkts bytes target     prot opt in     out     source               destination        

Chain OUTPUT (policy ACCEPT 167 packets, 10845 bytes)
 pkts bytes target     prot opt in     out     source               destination        

Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
 pkts bytes target     prot opt in     out     source               destination        
  200 13153 MASQUERADE  all  --  *      eth0    0.0.0.0/0            0.0.0.0/0 

0