iptables / porta de encaminhamento do KVM

3

Eu tenho um servidor com um endereço IP externo (por exemplo, 1.2.3.4 ). Nesse servidor, uso o libvirt para executar máquinas virtuais. Agora eu quero acessar um servidor virtual no meu host via ssh ( port 1234 ) do lado de fora.

No meu sistema host eu tenho uma interface de rede eth0 que está conectada ao meu IP externo ( 1.2.3.4 ).

Minha máquina virtual está conectada à máquina host por meio de uma interface nat chamada virbr0 com o ip 192.168.122.235 .

Como preciso encaminhar uma porta, fiz o seguinte com iptable

iptables -t nat -A PREROUTING -p tcp -i eth0 --dport 1234 -j DNAT --to-destination 192.168.122.235:1234

iptables -A FORWARD -p tcp -d 192.168.122.235 --dport 1234 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Para redes básicas eu também tenho UFW em execução no host permite port 1234 :

Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), allow (routed)
New profiles: skip

To                         Action      From
--                         ------      ----
[SOMEOTHERPORTS]
1234/tcp                  ALLOW IN    Anywhere
1234/tcp (v6)             ALLOW IN    Anywhere (v6)

Assegurei-me de que o encaminhamento seja permitido para todas as interfaces de rede envolvidas:

user@someserver ~ # cat /proc/sys/net/ipv4/conf/virbr0/forwarding 
1
user@someserver ~ # cat /proc/sys/net/ipv4/conf/eth0/forwarding 
1

Ao tentar se conectar via ssh ao servidor da rede externa para 1.2.3.4 , obtenho:

ssh: connect to host 1.2.3.4 port 1234: Connection refused

Eu verifiquei a conexão ssh do host, que está funcionando perfeitamente.

  • O que estou fazendo errado aqui?
  • O UFW interfere com o iptables?
  • Como posso fazer isso funcionar?
  • Existe uma maneira mais fácil de fazer o encaminhamento de porta com libvirt / virt-manager? (Eu tentei isso: link que não funcionou porque o XML não é válido quando mudar para / ele valida mas não funciona se eu deixá-lo na "rede")
por Flatron 16.04.2016 / 17:41

4 respostas

1

Existem algumas coisas que devemos considerar.

What am I doing wrong here?

Vamos ver a configuração atual do iptables e então podemos examiná-la.

Does UFW interfere with iptables?

O UFW é um front-end de linha de comando para o iptables, mas ele não possui muitos dos recursos do iptables. Ter a configuração do iptables mostrará o que o UFW fez com base nos comandos que você inseriu. Você não deve, no entanto, criar regras com ambos no mesmo computador. Isso está pedindo complicações. Se você for digitar seus comandos no UFW, os scripts do iptables deverão ser desativados. Se você for digitar seus comandos no iptables, então você deve remover o UFW.

How can I get this working?

Tente isso.

iptables -t nat -I PREROUTING -p tcp -i eth0 --dport 1234 -j DNAT --to 192.168.122.235:1234

iptables -A FORWARD -i eth0 -o vibr0 -p tcp --dport 1234 -j ACCEPT

Mas lembre-se de que o convidado está conectado ao host usando o NAT com o adaptador. Então, isso provavelmente não funcionará.

O que você realmente deve considerar é mudar o tipo de adaptador de NAT para ponte.

    
por 16.04.2016 / 18:33
0

Acho que você também deve usar uma conexão em ponte:

Tente descobrir seu nome da rede:

 virsh net-edit <network name>

O nome da rede que você pode ver no Virt Manager. Normalmente é o padrão:

 virsh net-edit default

Mude de NAT para bridge (também o nome da Bridge que você encontra no Virt Manager)

<network>
   <name>default</name>
   <uuid>cc45a671-e8d8-4149-a6a5-8d5547551a58</uuid>
   <forward mode='route'/>
   <bridge name='virbr0' stp='on' delay='0'/>
   <mac address='AA:CC:DD:86:53:54'/>
   <ip address='192.168.122.1' netmask='255.255.255.0'>
      <dhcp>
         <range start='192.168.122.2' end='192.168.122.254'/>
      </dhcp>
   </ip>
</network>

Observações:

  • No exemplo, usamos o DHCP para atribuir nomes às VMs. Você também pode fazer configurações estáticas

  • Se você usar ifconfig, deverá obter:

    encapsulamento de ligação virbr0: Ethernet Hardware Endereço AA: VV: CC: 86: 53: 54
          inet Endereço: 192.168.122.1 Bcast: 192.168.122.255 Maske: 255.255.255.0       UP BROADCAST EXECUTANDO O MULTICAST MTU: 1500 Metrik: 1       RX-Pakete: 127 Nº de e-mails: 0 Clasificados: 0 Überläufe: 0 Caixa: 0       TX-Pakete: 44 Escolhidos: 0 Visitantes: 0 Überläufe: 0 Número: 0       Posição: 0 Sendewarteschlangenlänge: 0       RX-Bytes: 13032 (13,0 KB) TX-Bytes: 4707 (4,7 KB)

  • Basicamente, você deve usar a porta 22 para ssh

  • Tente usar:

    sudo iptables -t nat -A POSTROUTING -s 192.168.122.235 -j SNAT - para a fonte 1.2.3.4

Então você pode localizar se é um problema com as portas. Na verdade, você pode depois de fechar as portas na VM com o Gufw.

    
por 16.04.2016 / 19:57
0

Estas são as minhas regras de encaminhamento que muito bem.

-A POSTROUTING -s 192.168.122.0/24 -d 224.0.0.0/24 -j RETURN
-A POSTROUTING -s 192.168.122.0/24 -d 255.255.255.255/32 -j RETURN
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p tcp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -p udp -j MASQUERADE --to-ports 1024-65535
-A POSTROUTING -s 192.168.122.0/24 ! -d 192.168.122.0/24 -j MASQUERADE
-A POSTROUTING -s 192.168.122.0/24 -o br1 -j MASQUERADE
-A INPUT -s 192.168.122.0/24 -j ACCEPT
-A FORWARD -d 192.168.122.0/24 -o virbr0 -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.122.0/24 -i virbr0 -j ACCEPT
-A FORWARD -i virbr0 -o virbr0 -j ACCEPT
-A FORWARD -o virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i virbr0 -j REJECT --reject-with icmp-port-unreachable
-A FORWARD -i virbr0 -j ACCEPT
-A FORWARD -i br1 -o virbr0 -j ACCEPT
    
por 29.04.2017 / 10:40
0

Eu tive praticamente o mesmo problema. Eu queria encaminhar a porta 22 da minha máquina host para a minha VM, também executando o KVM, com a rede NAT.

Eu encontrei esta postagem: link

Que teve as respostas para mim.

TL; DR

192.168.1.161 é o IP dos meus servidores na rede interna. 192.168.122.2 é o meu ip de VMs no host.

iptables -t nat -I PREROUTING -p tcp -d 192.168.1.161 --dport 22 -j DNAT --to-destination 192.168.122.2:22
iptables -I FORWARD -m state -d 192.168.122.2/24 --state NEW,RELATED,ESTABLISHED -j ACCEPT 

Isenção de responsabilidade. Eu não tenho ideia do que isso faz exatamente. Parece o mesmo que muitas outras respostas encontradas, apenas algumas das tags de parâmetros sendo ligeiramente diferentes.

    
por 22.05.2018 / 16:50