
Eu tenho a instância do CentOS como NAT para minha rede local. Existem algumas sub-redes na minha rede local. Existe um servidor VPN PPTP dentro de um. Eu preciso publicar este servidor na Internet.
Então. Meu problema é que o tráfego não passa de nat/PREROUTING
rede em filter/FORWARD
rede.
1.1.1.1
é meu IP externo192.168.10.1
é meu IP interno10.0.1.1
é o IP do servidor VPNeth0
é interface externaeth1
é interface interna
Regras NAT(funciona. PKTS
e BYTES
é alterado)
-A PREROUTING -d 1.1.1.1/32 -i eth0 -p tcp -m tcp --dport 1723 -j DNAT --to-destination 10.0.1.1
-A PREROUTING -d 1.1.1.1/32 -i eth0 -p gre -j DNAT --to-destination 10.0.1.1
Regras de FILTRO(não funciona. PKTS
e BYTES
não é alterado)
-A FORWARD -d 10.0.1.1/32 -i eth0 -o eth1 -p tcp -m tcp --dport 1723 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.0.1.1/32 -i eth1 -o eth0 -p tcp -m tcp --sport 1723 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -d 10.0.1.1/32 -i eth0 -o eth1 -p gre -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.0.1.1/32 -i eth1 -o eth0 -p gre -m state --state RELATED,ESTABLISHED -j ACCEPT
Claro, net.ipv4.ip_forward = 1
e posso fazer ping 10.0.1.1
no servidor NAT.
A tcpdump
porta 1723 mostrava ações apenas na interface externa.
Eu não tenho ideia.
UPD1
. Verifiquei o roteamento com ip route get 10.0.1.1 from <src> iif eth0
e consegui RTNETLINK answers: Invalid argument
. Aliás, eu obtive alguma resposta e usei qualquer iif
nome ( eth0
, eth1
, eth2
). Só obtive a rota válida e não usei iif
argumento.
UPD2
. Eu adicionei -A FORWARD -d 10.0.1.1/32 -j ACCEPT
a regra na filter/FORWARD
cadeia primeiro. Mas nada. Pacotes e bytes eram zero.
Responder1
Outras regras são muito importantes. E a ordem das regras também. Portanto, verifique a saída do
iptables-save -c
comando. Investigue as regras acima daquelas que você criou.Entre as cadeias
nat/PREROUTING
efilter/FORWARD
a decisão de roteamento é tomada. Verifique o roteamento comip route get 10.0.1.1 from <src> iif eth0
. Deve retornar a rota válida. Se for outra coisa, cole na pergunta.Investigue também uma saída do
nstat -az
comando.Para passar o pptp pelo NAT é necessário carregar os módulos para conntrack:
nf_conntrack_proto_gre
nf_nat_proto_gre
nf_conntrack_pptp
nf_nat_pptp
Nos kernels recentes você deve habilitar explicitamente os auxiliares conntrack, especialmente para o pptp. Então você precisa adicionar a regra adicional.
iptables -t raw -A PREROUTING -p tcp -m tcp --dport 1723 -j CT --helper pptp
- Outra maneira de ativar o auxiliar é o comando sysctl:
sysctl -w net.netfilter.nf_conntrack_helper=1
- Outras ferramentas para solucionar seu problema:
conntrack -E
- monitoramento de eventos conntracktcpdump
-j NFLOG
etcpdump -ni nflog
- permitir capturar os pacotes da regra iptables.-j TRACE
alvo - você pode investigar o caminho dos pacotes através das regras do firewall.
PSAtualize a pergunta se você ainda estiver travado.