iptables: alias de IP e encaminhamento de porta

1

Eu não consigo descobrir o iptables e não sei muito sobre networking e realmente espero que alguém possa me ajudar.

Eu tenho um servidor com dois endereços IP associados a ele: 1.1.1.1 e 2.2.2.2

Executando o Ubuntu 10.04

Aqui está o meu ifconfig:

eth0      Link encap:Ethernet  HWaddr 00:16:3e:xx:xx:xx  
          inet addr:1.1.1.1  Bcast:xxx.xxx.xxx.xxx  Mask:xxx.xxx.xxx.xxx
          inet6 addr: xxxxxxxxxxxxxxxxxxxxxxxx Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:8601280 errors:0 dropped:0 overruns:0 frame:0
          TX packets:2520243 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000 
          RX bytes:1736805563 (1.7 GB)  TX bytes:412953236 (412.9 MB)
          Interrupt:11 

eth0:0    Link encap:Ethernet  HWaddr 00:16:3e:xx:xx:xx  
          inet addr:2.2.2.2  Bcast:xxx.xxx.xxx.xxx  Mask:xxx.xxx.xxx.xxx
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          Interrupt:11 

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:16436  Metric:1
          RX packets:1216209 errors:0 dropped:0 overruns:0 frame:0
          TX packets:1216209 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:13294196379 (13.2 GB)  TX bytes:13294196379 (13.2 GB)

Tudo funciona bem: quando eu digito 1.1.1.1 ou 2.2.2.2 na barra de endereço de um navegador, recebo a página padrão do Apache2 como esperado.

Agora, tenho um aplicativo que roda no navegador que tem uma conexão WebSocket pela porta 8000. Atendo a página pela porta 80 (http) como de costume usando o 1.1.1.1, e tenho o WebSocket se comunicando nos bastidores com 2.2.2.2 através da porta 8000. Tudo bem.

Agora eu conecto meu modem 3G que bloqueia a porta 8000. Minha comunicação do WebSocket com o 2.2.2.2 falha.

Eu quero que o WebSocket se comunique com o 2.2.2.2 pela porta 80, mas faça com que o servidor traduza solicitações em 2.2.2.2:80 a 1.1.1.1:8000.

Eu encontrei isto: meteorserver dot org / installation / (veja seção 6) mas não funcionou; Eu também tentei isso: link mas me deu o seguinte erro:

ubuntu> sudo iptables -t nat -A PREROUTING -i eth0:0 -p tcp --dport 80 -j REDIRECT --to-port 8000
Warning: weird character in interface 'eth0:0' (No aliases, :, ! or *).

Aparentemente aliases de IP não são suportados (tentei colocar eth0: 0 entre aspas e ainda assim não funcionaria.

Estou completamente perplexo.

    
por Eamorr 06.08.2010 / 02:17

4 respostas

9

Você está no caminho certo. Você não precisa especificar a interface de entrada "alias". Do ponto de vista do iptables, a interface de entrada ainda é eth0, mesmo se o endereço IP de destino for 2.2.2.2. Tente assim:

iptables -t nat -A PREROUTING -i eth0 -d 2.2.2.2 -p tcp --dport 80 -j REDIRECT --to-port 8000

Isso deve fazer o que você está procurando.

Editar:

Você quer "eth0" nesse comando - não "eth0: 0" (que não é legal). A interface física na qual o pacote está entrando é "eth0", que é tudo o que o iptables está preocupado.

A menos que o protocolo que você está usando seja baseado em UDP, você não precisa de uma entrada "-p udp" correspondente.

Para ver o que há em sua cadeia "PREROUTING" agora, faça um iptables -t nat -L . Você pode excluir entradas individuais da cadeia usando o iptables -t nat -D PREROUTING x onde "x" é a contagem seqüencial da entrada na cadeia que você deseja excluir (a primeira é "1", a segunda é "2", etc) conforme exibido por iptables -t nat -L .

    
por 06.08.2010 / 02:20
2

Não corresponde ao nome do dispositivo. Tente apenas combinar com base no IP

sudo iptables -t nat -A PREROUTING --destination 2.2.2.2 -p tcp --dport 80 -j REDIRECT --to-port 8000
    
por 06.08.2010 / 03:24
1

Responderei sua pergunta com outra pergunta: D

Q: How can I use aliased network interfaces with your firewall (like eth0:0) in rules?

A: The current Linux implementation doesn't allow distinction between eth0 or eth0:0 in eg. iptables/netfilter rules. You can only specify eth0 which automatically includes eth0:0 (and other aliased interfaces). You can however use the IP address of the aliased interface for rules.

Verifique isso:

Linux iptables: Exemplo de Redirecionamento de Porta

    
por 06.08.2010 / 02:40
0

Outra abordagem: use interfaces virtuais (macvlan).

Os aliases de Ip são um truque de nível mais alto e o iptables verá apenas uma interface (a real). Você pode evitar o problema usando diretamente os intervalos de IP, conforme sugerido.

Com interfaces vlan você não deve ter nenhum problema com o netfilter / iptables, pois eles se comportam como interfaces normais no nível do kernel. Para adicionar um novo (você não precisa especificar o mac):

link ip adicionar link nome_real_se endereço mac: virt: se nome_virt_if tipo macvlan

Desta forma, você trabalha diretamente no osi2, na verdade você poderia usá-los em configurações de pontes, fazer com que as regras do firewall / qos dependessem de atribuições de ip ...

Demorei um pouco para encontrar essa solução, sempre usei o ifconfig eth0: 0, é rápido e útil, mas talvez seja hora de migrar para o iproute2.

    
por 10.08.2010 / 01:57