Mam usługę działającą na 127.0.0.1 z portem 2222. Muszę przekazywać wszystkie żądania do 192.168.2.2:2222 (poza IP) tylko z podsieci 192.168.1.0/24 do 127.0.0.1:2222.
Próbuję tego użyć, ale to nie działa.
$ iptables -t nat -I PREROUTING -p tcp -d 192.168.1.0/24 --dport 2222 -j DNAT --to-destination 127.0.0.1:2222
Jak mogę to uruchomić?
UPD: Edytuj schemat adresów.
iptables
port-forwarding
network-interface
SimWhite
źródło
źródło
2222
na interfejsie sprzężenia zwrotnego z podsieci192.168.1.0/24
? To nie jest tylko jeden typ konfiguracji reguł. Zobacz tutaj: debuntu.org/…Odpowiedzi:
Używana reguła iptables będzie działać, ale musisz wprowadzić jedną dodatkową zmianę:
(zamiana
eth0
na nic192.168.2.2
pozostaje włączona)Domyślnie ta wartość wynosi
0
, która instruuje jądro, aby nie kierowało ruchu zewnętrznego przeznaczonego do127.0.0.0/8
. Ma to na celu bezpieczeństwo, ponieważ taki ruch nie jest normalny.Uwaga dodatkowa: twoja obecna reguła iptables jest zbyt szeroka. Reguła określa
-d 192.168.1.0/24 --dport 2222
jako dopasowanie docelowe, co oznacza, że jeśli twój komputer spróbuje porozmawiać z innym hostem na porcie 2222 (tj. Ruch wychodzący), zostanie również przekierowany. Musisz albo zmienić-d
dopasowanie-d 192.168.2.2
, albo dodać-i eth0
(lub cokolwiek, co jest twoje nic).źródło
route_localnet
. Czy były na to inne nazwy? (w systemie 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 spedycja mc_forwarding promote_secondaries rp_filter send_redirects tagroute_localnet
jest nowsza (7 czerwca 2012 r.) Niż moje jądro (2.6.30-std-def-alt15 # 1 SMP Mon Dec 14 08:45:48 UTC 2009). Ok, po prostu osiągnę pożądane przekierowanie portów (z zewnątrz do wewnątrz) z procesem przekierowania, takim jaknetcat
(nc
)xinetd
, lub opcje przekierowania portówssh
(to drugie jest nieskuteczne i głupie, oczywiście, ale wspominam o tym, ponieważ, no cóż, istnieje taka możliwość).sysctl -w net.ipv4.conf.all.route_localnet=1
Możesz przekierowywać na localhost, ale nie do pętli zwrotnej (127.0.0.0/8). Loopback to luka. Musisz przekierować do jednego ze swoich prawdziwych interfejsów. Spróbuj użyć opcji REDIRECT.
iptables -t nat -A PREROUTING ..... -j REDIRECT --to-port 222
źródło
-j DNAT --to-destination w.x.y.z:222
Co jeśli poprawna odpowiedź z
route_localnet
nie działa? ..Jeśli twoje jądro nie zawiera łatki
route_localnet
, to ... zaktualizuj jądro!Lub istnieją inne sposoby przekazywania ruchu przychodzącego do jednego interfejsu do innego portu w innym interfejsie (w szczególności do hosta lokalnego) poprzez uruchomienie procesu, który nasłuchiwałby na interfejsie zewnętrznym i przekazywał ruch.
netcat
(nc
)xinetd
issh
(i być może więcej) to przykłady programów, które potrafią to zrobić (chociaż wybórssh
byłby dziwny i nieskuteczny).Napisałem
xinetd
dla tego konfigurację . Teraz ta usługa jest automatycznie wywoływana:(
vaio.ob
to nazwa tego hosta w interfejsie sieci zewnętrznej).Po a
service xinetd reload
sprawdźmy, czy nasłuchuje:I rzeczywiście, połączenia przechodzą!
źródło