Redirecionar solicitações para meu IP / porta externo para um IP / porta interno?

3

Eu tenho um servidor dedicado executando virtualização KVM com n endereços IP públicos dedicados a máquinas virtuais n-1 voltadas para a web. Agora, gostaria de configurar algumas VMs voltadas para a Web que não tenham um endereço dedicado, mas terão 2 ou 3 portas encaminhadas para elas a partir da máquina host.

A configuração da ponte é:

brctl show

Digamosqueeugostariadeencaminhar

  • 178.126.193.153:201a192.168.1.101:22
  • 178.126.193.153:801a192.168.1.101:80

Primeiro,habiliteioencaminhamentodeportaemumamáquinahostremovendoocomentário

#net.ipv4.ip_forward=1

em/etc/sysctl.conf,entãoeufiz

sysctl-p/etc/sysctl.confservicenetworkrestart

Então,semelhanteàreceitaem esta pergunta , eu fiz:

iptables -t nat -A PREROUTING -p tcp -i br0 --dport 201 -j DNAT --to-destination 192.168.1.101:22
iptables -A FORWARD -p tcp -d 192.168.1.101 --dport 201 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A PREROUTING -p tcp -i br0 --dport 801 -j DNAT --to-destination 192.168.1.101:80
iptables -A FORWARD -p tcp -d 192.168.1.101 --dport 801 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT

Corri ifconfig em uma máquina convidada e verifiquei que sua interface eth0, na verdade, tem o endereço IP 192.168.1.101. A interface dentro da máquina virtual é chamada de eth0 , está correto?

Mas isso não funciona:

nmap 178.126.193.153 não mostra uma porta aberta 201 nem 801 e ssh -l root -p 201 178.126.193.153 me recebe

ssh: connect to host 178.126.193.153 port 201: Connection refused

ip route em uma máquina host retorna

178.126.193.128/26 dev br0  proto kernel  scope link  src 178.162.193.153 
192.168.122.0/24 dev virbr0  proto kernel  scope link  src 192.168.122.1 
169.254.0.0/16 dev br0  scope link  metric 1004 
default via 178.126.193.190 dev br0 

O que estou fazendo de errado?

    
por Nickolai Leschov 13.04.2014 / 05:29

2 respostas

3

Quando você encaminha o tráfego para um prot diferente, você precisa adicionar a regra SNAT pós-venda (ou masquerade, não importa). Também você cometeu alguns erros na regra avançada. Então tente isto:

iptables -t nat -A PREROUTING -p tcp -i br0 --dport 201 -j DNAT --to-destination 192.168.1.101:22
iptables -A FORWARD -p tcp -d 192.168.1.101 --dport 22 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -d 192.168.1.101 -p tcp --dport 22 -j SNAT --to-source 178.126.193.153
    
por 23.04.2014 / 22:19
0

Você precisa ativar o roteamento de loopback. Eu fiz isso no meu roteador com o seguinte:

iptables -A FORWARD -o eth1 -d $IP -j ACCEPT

iptables -A FORWARD -i eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT

Na minha configuração, eth0 é a interface da internet, $ IP é o IP da Internet e eth1 é a interface interna.

A chave aqui é que você precisa de uma regra FORWARD para o tráfego saindo de sua interface interna com o IP de destino externo. É um pouco confuso logicamente porque essa regra é aplicada antes do DNAT.

A segunda regra apenas aceita o tráfego interno a ser encaminhado em primeiro lugar, você pode conseguir isso de maneiras diferentes.

Não tenho certeza se outras coisas especiais se aplicam aqui, devido à parte da rede virtual, você pode precisar de ebtables para fazer isso funcionar também.

    
por 14.04.2014 / 22:33