iptables encaminha o tráfego entre duas interfaces

0

Minha configuração é feita (no mesmo host):

  • uma placa de interface de rede (NIC) eth0 com IP estático 192.168.1.10
  • um rótulo para o NIC eth0: 0 com IP estático 192.168.1.11
  • uma máquina virtual convidada (usando o KVM) em 192.168.122.11 no virbr0

Eu posso SSH a máquina de convidado do anfitrião usando seu IP 192.168.122.11, e eu posso SSH a máquina de anfitrião de uma máquina remota na rede de LAN que usa seu IP 192.168.1.10.

Eu gostaria de tornar o convidado virtual acessível a partir da LAN através do NIC rotulado para que eu possa conectar o SSH em 192.168.122.11, conectando-se a 192.168.1.11 a partir de uma máquina remota.

+--------------+
| Machine Ext2 |
+--------------+
       | ssh to 192.168.1.11:2222
       |
   +--------+
   | Router |
   +--------+
       |
       | (192.168.1.11:2222)
+----------------------------------------------+
| Machine Ext1 (Host)                          |
| <--> iptables <--> Guest (192.168.122.11:22) |
+----------------------------------------------+

Eu me inspirei em muitas coisas de diferentes tutoriais na web (tudo parece mais ou menos o mesmo), mas nada funciona e não consigo entender a configuração correta.

A idéia é criar regras de PREROUTING, FORWARD e POSTROUTING com o iptables para que os tráfegos de entrada e saída sejam redirecionados corretamente.

Eu editei /etc/sysctl.conf para que ip_fordward = 1 e execute os seguintes comandos iptables:

$ sudo iptables -t nat -A PREROUTING -i virbr0 -p tcp -d 192.168.1.11 --dport 2222 -j DNAT --to-destination 192.168.122.11:22
$ sudo iptables -A FORWARD -p tcp -d 192.168.122.11 --dport 22 -j ACCEPT
$ sudo iptables -t nat -A POSTROUTING -o virbr0 -p tcp -d 192.168.122.11 -j ACCEPT

O ping 192.168.1.11 ainda funciona bem. Mas a conexão para 192.168.1.11:2222 falha:

$ telnet 192.168.1.11 2222
$ telnet: Unable to connect to remote host: Connection refused

Eu sinto que estou perto de fazer o trabalho, mas perder alguma coisa .. Você pode me dar uma ajudinha?

Atenciosamente,

    
por jib 22.10.2016 / 18:03

1 resposta

0

  • Sua primeira regra está usando -i virbr0 . Se é para ser usado a partir de LAN, que deve ser -i eth0 e é provavelmente o seu problema.
  • Se sua política FORWARD padrão for ACCEPT, sua segunda regra será inútil. Se for DROP, você precisará de uma outra regra no FORWARD para permitir o fluxo do caminho inverso. Você pode dar seu conjunto completo de regras do iptables com: iptables-save -c ?
  • Sua terceira regra é inútil. As tabelas nat não requerem nenhum ACCEPT explícito. O fluxo reverso é sempre correto (usando conntrack) porque é stateful. Remova-o.
  • Quando você testa, certifique-se de fazer um teste da LAN (um outro sistema), não do seu host (o teste do próprio host não usará PREROUTING nem FORWARDING, mas a saída de nat e o OUTPUT do filtro, menos uma outra regra nat)
por 24.10.2016 / 02:16