Eu tenho um serviço em execução no 127.0.0.1 com porta 2222. Preciso encaminhar todas as solicitações para 192.168.2.2:2222 (IP externo) apenas da sub - rede 192.168.1.0/24 para 127.0.0.1:2222.
Estou tentando usar isso, mas não está funcionando.
$ iptables -t nat -I PREROUTING -p tcp -d 192.168.1.0/24 --dport 2222 -j DNAT --to-destination 127.0.0.1:2222
Como posso fazer isso funcionar?
UPD: Editar esquema de endereço.
iptables
port-forwarding
network-interface
SimWhite
fonte
fonte
2222
portado na interface de loopback a partir da sub-rede192.168.1.0/24
? Esse não é apenas um único tipo de configuração de regra. Veja aqui: debuntu.org/…Respostas:
A regra do iptables que você está usando funcionará, mas há uma alteração adicional que você precisa fazer:
(substituindo
eth0
pelo nic192.168.2.2
reside em)Por padrão, esse valor é
0
, que instrui o kernel a não rotear o tráfego externo destinado127.0.0.0/8
. Isso é apenas para segurança, pois esse tráfego não é normal.Nota adicional: sua regra atual do iptables é muito ampla. Sua regra especifica
-d 192.168.1.0/24 --dport 2222
como a correspondência de destino, o que significa que, se sua máquina tentar conversar com outro host na porta 2222 (ou seja, tráfego de saída), ela também será redirecionada. Você precisa alterar a-d
correspondência para-d 192.168.2.2
ou adicionar-i eth0
(ou qualquer que seja o seu nic).fonte
route_localnet
. Já houve outros nomes para isso? (em linux 2.6.30)ls /proc/sys/net/ipv4/conf/lan/
: accept_redirects arp_accept arp_filter arp_notify disable_policy force_igmp_version log_martians medium_id proxy_arp secure_redirects shared_media accept_source_route arp_announce arp_ignore bootp_relay disable_xfrm forwarding mc_forwarding promote_secondaries rp_filter send_redirects tagroute_localnet
é mais recente (7 de junho de 2012) que o meu kernel (SMP de segunda-feira 2.6.30-std-def-alt15 # 1 14 de dezembro de 08:45:48 UTC de 2009). Ok, simplesmente alcançarei o encaminhamento de porta desejado (de fora para dentro) com um processo de encaminhamento comonetcat
(nc
)xinetd
, ou as opções de encaminhamento de porta dessh
(o último é ineficaz e estúpido, é claro, mas mencionei, porque, bem, essa possibilidade existe).sysctl -w net.ipv4.conf.all.route_localnet=1
Você pode redirecionar para o host local, mas não para o loopback (127.0.0.0/8). O loopback é uma brecha. Você precisa redirecionar para uma de suas interfaces reais. Tente usar REDIRECIONAR.
iptables -t nat -A PREROUTING ..... -j REDIRECT --to-port 222
fonte
-j DNAT --to-destination w.x.y.z:222
E se a resposta correta com
route_localnet
não funcionar?Se o seu kernel não incluir o patch
route_localnet
, então ... atualize o kernel!Ou há outras maneiras de encaminhar o tráfego que chega a uma interface para outra porta em outra interface (em particular, para o host local) executando um processo que escuta na interface externa e encaminha o tráfego.
netcat
(nc
),xinetd
essh
(e talvez mais) são exemplos de programas capazes de fazer isso (embora a escolhassh
seja estranha e ineficaz).Eu escrevi uma configuração
xinetd
para isso. Agora, este serviço é ativado automaticamente:(
vaio.ob
é o nome desse host na interface de rede externa.)Após a
service xinetd reload
, vamos verificar se está escutando:E, de fato, as conexões passam!
fonte