Usando IPTables para encaminhar a porta para a entrada de eth1 (local) para ppp0 (vpn) de saída para um endereço IP específico

1

Então eu tenho uma VPN no ppp0 e eu configurei para que eu possa usar ppp0 ou eth1 para conectar-se com a rota padrão sendo eth1.

Ambos respondem a "ping google.com" (usa eth1) e "ping -I ppp0 google.com" (usa VPN)

Meta : Se eu me conectar a eth1 na porta 12345, ela encaminhará ppp0 para um endereço IP específico (123.123.123.123).

eth1 : rede local
ppp0 : serviço vpn
rede local : 10.10.1.0/24
< strong> forwarding ip : 123.123.123.123
porta : 12345

portas podem ser diferentes da mesma forma não importa, se funciona:)

iptables -t nat -A PREROUTING -p tcp -i eth1 -d 10.10.1.0/24 --dport 12345 -j DNAT --to-destination 123.123.123.123:12345
iptables -A FORWARD -p tcp -o ppp0 -d 123.123.123.123 --dport 12345 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT

Depois de pesquisar isso é o que a maioria das pessoas diz. Use o PREROUTE para definir um novo destino. Em seguida, encaminhar ppp0. Mas não está funcionando e eu não sei como realmente ver o que está fazendo.

    
por Brandon 20.01.2011 / 19:25

3 respostas

1

iptables -t nat -A PREROUTING -p tcp -i eth1 -d 10.10.1.0/24 \
  --dport 12345 -j DNAT --to-destination 123.123.123.123:12345

O tráfego gerado localmente nunca passará pela cadeia PREROUTING. Você pode verificar isso adicionando uma regra como esta:

iptables -t nat -A PREROUTING -j log -m limit --limit 1/s

Se você não estiver familiarizado com o iptables, a regra acima significa:

  • Registre (a uma taxa máxima de 1 mensagem / segundo) todos os pacotes que atravessam a cadeia PREROUTING.

Assista seus arquivos de log enquanto você faz conexões de saída e verá que nada está passando por essa cadeia. A cadeia PREROUTING só entra em jogo para o tráfego que entra no seu sistema de uma fonte externa.

Você pode pensar que poderia fazer isso na cadeia OUTPUT:

iptables -t nat -A OUTPUT ... -j DNAT ...

Mas quando um pacote atinge a corrente OUTPUT , a decisão de roteamento já foi tomada. Provavelmente, você pode querer usar uma regra REDIRECT na cadeia OUTPUT e, em seguida, executar um proxy tcp em uma porta local que redireciona as conexões para o seu destino. Ou seja, você pode adicionar uma regra assim:

iptables -t nat -A OUTPUT -p tcp -d 10.10.1.0/24 --dport 12345 \
  -j REDIRECT --to-ports 12345

E, em seguida, execute um proxy tcp localmente na porta 12345.

    
por 20.01.2011 / 20:19
1

Você pode tentar marcar seus pacotes com o iptables com MARK, algo assim depois ou antes do seu dnat:

iptables -t mangle -A PREROUTING -p tcp -d 123.123.123.123 --dport 12345 -j MARK --set-mark 111

Depois de definir uma rota específica para isso:

ip rule add fwmark 111 lookup 100

ip route add local 0.0.0.0/0 dev ppp0 table 100

    
por 20.01.2011 / 23:44
0

Isso é provavelmente porque a regra NAT apenas fornece um novo endereço IP de destino, que é roteado pela eth1. Então a regra de filtro não se aplica.

Você precisaria criar uma rota para esse destino específico através do ppp0 (se for bom para todo o tráfego vinculado a este destino passar pela vpn) ou usar a tabela mangle para escolher um destino manualmente. para este tráfego.

    
por 20.01.2011 / 20:17