iptables problema: nat com ip alias (interface virtual) não funciona

1

Estou configurando um servidor Ubuntu 11.10 para atuar como firewall para uma rede que executa vários sites SSL diferentes. A ideia é bastante comum: ter todos os IPs públicos de cada site com alias para a interface pública no firewall e usar o iptables / NAT para encaminhar conexões para os servidores da web. Eu estou tendo um demônio de conseguir essa coisa bastante simples de trabalhar.

Digamos que eu tenha uma interface voltada ao público no firewall:

eth0 25.25.25.25

E eu quero alias um novo IP para essa interface pública:

ifconfig eth0:0 25.25.25.26

Eu então vejo a interface criada e posso fazer o ping de outros hosts. Por enquanto, tudo bem. Agora eu tenho meu servidor web sentado no lado da DMZ da rede, acessível pelo firewall, mas não pelo público. Digamos que o servidor da web interno seja 172.16.2.1. Então eu crio uma regra NAT como segue:

iptables -t nat -A PREROUTING -i eth0 -d 25.25.25.26 -j DNAT - para destino 172.16.2.1

Ele simplesmente não quer funcionar. Se eu rodar o tcpdump na interface pública, ele verá o tráfego de entrada, mas o iptables não irá NAT para o destino.

Ele funcionará bem se eu usar um IP sem serrilhado, como 25.25.25.25. Eu li que o iptables não gosta de trabalhar com interfaces virtuais e as ignora. Tudo bem, mas ainda deve estar trabalhando com "eth0" em vez de "eth0: 0". No meu caso, o iptables não reclama se eu tentar usar "eth0: 0", mas isso não faz diferença alguma.

Estou usando o OpenBSD há muito tempo, então estou confortável em configurar essa mesma coisa com o pf. Mas anos atrás eu costumava fazer isso com uma caixa RedHat e funcionava muito bem. Alguma coisa mudou? Tem que haver uma maneira de fazer isso. Eu vi vários exemplos de outras pessoas dizendo que você só precisa ter certeza de especificar o dispositivo principal (eth0) em vez de usar eth0: 0. Mas eu não tenho nada.

Ah, e para descartar que isso é apenas um problema de filtragem, desativei completamente todas as regras de filtro:

iptables -F
iptables -X
iptables -P FORWARD ACCEPT
iptables -P INPUT ACCEPT
iptables -P OUTPUT ACCEPT

Alguma ideia? Eu certamente não sou novato quando se trata de iptables, mas esse problema está começando a me fazer sentir como um.

    
por skyrimjunkie 15.03.2012 / 01:00

2 respostas

2

Quando você usa interfaces virtuais, apenas use a opção -d (destino), ignorando a opção -i (interface)

Em vez de: iptables -t nat -A PREROUTING -i eth0 -d 25.25.25.26 -j DNAT --to-destination 172.16.2.1

use: iptables -t nat -A PREROUTING -d 25.25.25.26 -j DNAT --to-destination

Trabalhe com o iptables v1.4.14 no Debian

    
por 15.07.2013 / 19:03
-1

Provavelmente, você precisará usar a cadeia de encaminhamento e não fornecerá interface de entrada para isso:

iptables -t nat -A PREROUTING -i eth0 -d 25.25.25.26 -j DNAT --to-destination 172.16.2.1

Tente assim:

iptables -t nat -A FORWARD -d 25.25.25.26 -j DNAT --to-destination      172.16.2.1

Isso funciona para mim tanto no Debian / Ubuntu quanto nos roteadores baseados no iptables como o MikroTik também. Você também pode dar uma olhada aqui sobre o encaminhamento de porta, pode ser útil também.

    
por 15.02.2017 / 07:14