2008-10-28 18 views
18

Czy można zmienić port docelowy pakietu UDP za pomocą iptables?Używanie iptables do zmiany portu docelowego

Próbuję dostać agenta SNMP do wysyłania pułapek na 1620 zamiast 162. Niestety do tej pory udało mi się tylko zmienić port źródłowy:

iptables -t nat -A POSTROUTING -p udp --dpor. 162 -j SNAT - do: 1620

Odpowiedz

4

To użycie najwyraźniej nie jest obsługiwane. Zaczerpnięte z http://www.netfilter.org/documentation/HOWTO/NAT-HOWTO.txt:

6.3.7. Zmiana przeznaczenia lokalnie generowanych połączeń

Kod NAT pozwala na wstawianie zasady cel DNAT do łańcucha OUTPUT, ale
ten nie jest w pełni obsługiwana w wersji 2.4 (to może być, ale to wymaga nowego
opcja konfiguracji, niektóre testy, i sporo kodu, więc jeśli ktoś nie zleci Rusty'emu napisania go, I nie spodziewałbym się tego wkrótce).

Obecne ograniczenie jest, że może tylko zmienić miejsce docelowe do
lokalną maszynę (np `j DNAT --to 127.0.0.1'), a nie na dowolną inną, ponieważ odpowiedzi nie będzie przetłumaczone poprawnie.

+0

Czy to nie przekierowanie do portu 1620 na komputerze lokalnym? To wydaje się być tym samym zaleceniem, co Askotoki. –

+0

Masz rację ... Zagłębiłem się nieco i znalazłem powyższe informacje. –

0

Zamiast tworzyć SNAT, spróbuj z DNAT. Port źródłowy zostanie zmieniony, ponieważ SNAT oznacza SourceNAT, więc DNAT będzie działał dla ciebie.

+0

dostać DNAT pracować będzie trzeba aby określić adres IP jako - do-miejsca przeznaczenia – PiedPiper

+0

To nie byłby duży problem w tym przypadku, ale reguła DNAT również nie działa. Reguła nie jest trafiona, a wysłane pakiety nie są modyfikowane. –

+0

Nie można używać DNAT w łańcuchu POSTROUTING. http://iptables-tutorial.frozentux.net/iptables-tutorial.html#DNATTARGET – borodimer

1

@PiedPiper miał rację. W przypadku DNAT należy podać adres IP, ale chcemy tylko przekierować port, więc -j REDIRECT może działać w tym przypadku.

Zobacz http://www.netfilter.org/documentation/HOWTO//NAT-HOWTO-6.html#ss6.2

+0

Jeśli przeczytam, że prawe przekierowanie wyśle ​​pakiet do portu 1620 na komputerze lokalnym. Chcę, żeby trafił do miejsca docelowego wymienionego w pakiecie, ale do portu 1620 zamiast do 162. –

+0

Tak, nie przeczytałem tego po raz pierwszy. Przepraszam. – azkotoki

4

Zakładając wiesz który maszyna wysyłasz do:

iptables -t nat -A OUTPUT -p udp --dport 162 -j DNAT --to-destination <dest-ip>:1620 
+0

Powoduje to, że moje iptables narzekają: "iptables: Niepoprawny argument" –

+0

To działa dla mnie. Zamieniasz z prawdziwym adresem IP? – PiedPiper

+0

To polecenie działało dobrze dla mnie. Kernel 2.6 i iptables 1.2.11+ – borodimer

5

można przekierować 162 do 1620

iptables -t nat -A PREROUTING -p UDP --dport 162 -j REDIRECT --to-portu 1620

Powiązane problemy