Eu tenho 2 VMs executando o CentOS 7 com as seguintes ifconfig
configurações:
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
E eu quero VM2
poder acessar a internet. Alguma idéia de como conseguir isso?
Eu tentei todas as combinações de iptables
POSTROUTING, PREROUTING, FORWARD, DNAT, SNET
e route
você pode pensar sem sucesso. Eu devo estar fazendo algo errado.
Alguém tem um exemplo simples de como conseguir isso?
Para testar VM2
o acesso externo, estou executando ping www.google.com
(e IP) - mas obtendo host desconhecido e 100% de perda de pacotes, respectivamente.
EDIT - Mais informações
Correndo tcpdump -nni eth0:0 icmp
em VM1
e ping 8.8.8.8
sobre VM2
os rendimentos os seguintes resultados:
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
Mas VM2
não recebe os pacotes. Aqui está o meu iptables
script para 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
E route
para VM2
:
route add default gw <VM1 private ip>
EDIT 2 - Mais informações
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
E 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
172.22.xx.xx
e podem executar ping uma na outra.
route add default gw host
. tcpdump -nni eth0:0 icmp
on VM Host
e ping host
(host é hostname) on VM client
mostra pings bem-sucedidos tcpdump
. Fazer um ping google.com
from VM client
não produz nada e a ping 8.8.8.8
aparece VM Host tcpdump
, mas 100% de perda de pacotes ativada VM Client
. Isso indica que as icmp
respostas não estão sendo encaminhadas de volta VM Client
? Eu ip_forward
configurei para 1
. Veja OP para mais detalhes ..