iptables MASQUERADE e SNAT juntos

1

Boas pessoas,

Eu tenho uma rede com a seguinte configuração

eth0 10.216.11.41 voltado para a internet

eth1 192.168.0.4 rede interna interagindo com outras máquinas dentro da rede interna.

Eu gostaria de usar esta máquina como um gateway com os seguintes requisitos.

  1. Todo o tráfego da rede interna que sai para o yahoo.com é SNATted com um --to 10.216.11.40 até a eth0
  2. Tudo o mais para ser MASQUARADed via eth0 cujo ip é 10.216.11.41

Eu esperava conseguir isso vis

#everything to yahoo be snatted
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 10.216.11.40 --destination yahoo.com 

#everything else be masqueraded
iptables --t nat --A POSTROUTING --o eth0 -j MASQUERADE

Mas, infelizmente, a regra SNATting não leva um destino.

Como posso alcançar os requisitos acima?

    
por artfullyContrived 10.08.2013 / 15:09

1 resposta

2

Você precisa colocar o SNAT em uma nova cadeia separada.

Então, onde você tem o SNAT agora, você precisa escrever uma regra que teste o IP de destino e, se for equivalente àquele para o qual você quer fazer isso, pular para a cadeia que você criou acima.

Perto do começo do seu arquivo iptables

/sbin/iptables -t nat -N SNATChain

para criar uma cadeia na tabela nat chamada "SNATChain"

Em seguida, substitua isso:

#everything to yahoo be snatted
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to 10.216.11.40 --destination yahoo.com

com isso:

#if the destination IP matches yahoo, throw it to SNATChain
/sbin/iptables -t nat -A POSTROUTING -o eth0 --destination yahoo.com -j SNATChain

e, em seguida, preencha seu SNATChain com a regra que você deseja

/sbin/iptables -t nat -A SNATChain -o eth0 -j SNAT --to 10.216.11.40

Eu acredito que é como fazer isso. Já faz algum tempo desde que eu mexi com iptables .

    
por 10.08.2013 / 15:21