Ich möchte Port 500 innerhalb desselben Hosts an Port 2500 weiterleiten und Folgendes hat unter Lubuntu 16.04 funktioniert, aber nach dem Neustart und der erneuten Ausführung der iptables-Befehle funktioniert es nicht:
iptables -t nat -A PREROUTING -p udp -d 192.168.1.10 –dport 500 -j DNAT –to-destination 192.168.1.10:2500
iptables -A FORWARD -p udp -d 192.168.1.10 –dport 2500 -j ACCEPT
wobei 192.168.1.10 die IP meines lokalen Hosts ist.
Zum Testen in einer Sitzung führe ich netcat aus:
nc -u 192.168.1.10:500
und in einem 2. Sitzungslauf:
nc -l -u 500
und in einem 3. Sitzungslauf:
nc -l -u 2500
Ich möchte also, dass die Daten, die ich in Sitzung 1 eingebe, in Sitzung 3 und nicht in Sitzung 2 empfangen werden. Das hat bei mir funktioniert, aber ich bekomme es nicht wieder zum Laufen.
Ich habe auch versucht:
iptables -t nat -A PREROUTING -p udp --dport 500 -j REDIRECT --to-port 2500
Es werden jedoch weiterhin Pakete über Port 500 und nicht über 2500 empfangen.
ufw ist deaktiviert und um sicherzustellen, dass iptables funktioniert, habe ich Folgendes versucht:
iptables -A INPUT -p udp --dport 500 -j DROP
und dann wurden Pakete nicht wie erwartet auf Port 500 oder 2500 empfangen. Portweiterleitung ist aktiviert:
# cat /proc/sys/net/ipv4/ip_forward
1
Sitzungsausgabe unten:
root@mike-TravelMate-8371:~/nat/out# iptables -t nat -S;iptables -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A PREROUTING -d 192.168.1.10/32 -p udp -m udp --dport 500 -j DNAT --to-destination 192.168.1.10:2500
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A FORWARD -d 192.168.1.10/32 -p udp -m udp --dport 2500 -j ACCEPT
root@mike-TravelMate-8371:~/nat/out# nohup nc -l -u 2500 > nc_2500.out &
[1] 29806
root@mike-TravelMate-8371:~/nat/out# nohup: ignoring input and redirecting stderr to stdout
root@mike-TravelMate-8371:~/nat/out# nohup nc -l -u 500 > nc_500.out &
[2] 29810
root@mike-TravelMate-8371:~/nat/out# nohup: ignoring input and redirecting stderr to stdout
root@mike-TravelMate-8371:~/nat/out# jobs
[1]- Running nohup nc -l -u 2500 > nc_2500.out &
[2]+ Running nohup nc -l -u 500 > nc_500.out &
root@mike-TravelMate-8371:~/nat/out# nc -u 192.168.1.10 500
test forwarding UDP port 500 to 2500
^C
[2]+ Done nohup nc -l -u 500 > nc_500.out
root@mike-TravelMate-8371:~/nat/out# head nc*.out
==> nc_2500.out <==
==> nc_500.out <==
test forwarding UDP port 500 to 2500
root@mike-TravelMate-8371:~/nat/out# ip a
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
inet6 ::1/128 scope host
valid_lft forever preferred_lft forever
2: enp2s0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
link/ether 00:1e:33:24:98:86 brd ff:ff:ff:ff:ff:ff
3: wlp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000
link/ether 00:22:fb:64:bd:42 brd ff:ff:ff:ff:ff:ff
inet 192.168.1.10/24 brd 192.168.1.255 scope global dynamic wlp1s0
valid_lft 85651sec preferred_lft 85651sec
inet6 fd58:7f66:569d:5300:c5df:415:6c56:50d6/64 scope global temporary dynamic
valid_lft 6788sec preferred_lft 3188sec
inet6 fd58:7f66:569d:5300:75d:bbe9:652e:6587/64 scope global mngtmpaddr noprefixroute dynamic
valid_lft 6788sec preferred_lft 3188sec
inet6 fe80::e214:14f8:d95c:73a7/64 scope link
valid_lft forever preferred_lft forever
4: vboxnet0: <NO-CARRIER,BROADCAST,MULTICAST,UP> mtu 1500 qdisc pfifo_fast state DOWN group default qlen 1000
link/ether 0a:00:27:00:00:00 brd ff:ff:ff:ff:ff:ff
inet 192.168.56.1/24 brd 192.168.56.255 scope global vboxnet0
valid_lft forever preferred_lft forever
inet6 fe80::800:27ff:fe00:0/64 scope link
valid_lft forever preferred_lft forever
root@mike-TravelMate-8371:~/nat/out# ip route
default via 192.168.1.1 dev wlp1s0 proto static metric 600
192.168.1.0/24 dev wlp1s0 proto kernel scope link src 192.168.1.10 metric 600
192.168.56.0/24 dev vboxnet0 proto kernel scope link src 192.168.56.1 linkdown
Der Grund, warum ich Ports weiterleiten möchte, ist, dass ich ein VPN zwischen einem externen Server und einem Gast einrichten möchte, der in einer Virtual Box läuft. Der Vbox-Gast verwendet ein „NAT“-Netzwerk, sodass Vbox über eine eigene Portweiterleitung verfügt, um Ports an die VM mit der IP-Adresse 10.0.2.15 weiterzuleiten. In Vbox lauten die Portweiterleitungsregeln also:
- TCP-Host 2222 zu Vbox-Gast 22
- UDP-Host 4500 zu Vbox-Gast 4500
- UDP-Host 2500 zu Vbox-Gast 500
Das erste bedeutet, dass ich mit "ssh -p 2222" eine SSH-Verbindung zum Gast herstellen kann.[email geschützt]"
Das zweite bedeutet, dass ich UDP-Pakete auf 4500 senden kann, also kann ich Pakete mit „nc -u 192.168.1.10 4500“ vom Host senden und ich kann sehen, wie sie auf dem Vbox-Gast mit „nc -l -u 4500“ empfangen werden (die Pakete werden NICHT gesehen, wenn Sie „nc -l -u 4500“ auf dem Host ausführen).
Der dritte Grund liegt darin, dass Vbox reservierte Ports unter 1024 NICHT weiterleitet und ich daher Port 500 nicht weiterleiten kann. Mit dieser Regel kann ich also „nc -u 192.168.1.10 2500“ auf dem Host verwenden und UDP-Pakete auf dem Vbox-Gast mit „nc -l -u 500“ empfangen.
Ich möchte also die Ports auf UDP 500 auf dem Host an Port 2500 weiterleiten, sodass diese von Vbox an Port 500 auf dem Gast weitergeleitet werden. Dies hat funktioniert, aber nach einem Neustart und erneutem Ausführen der iptables-Befehle hat es nicht funktioniert und nach mehreren Stunden Arbeit daran kann ich nicht herausfinden, was ich anders gemacht habe.
Ich habe versucht, iptables (und Vbox) mit TCP-Weiterleitung einzurichten, aber das funktioniert auch nicht. Außerdem habe ich ufw ausprobiert und ich habe versucht, lokale Ports mit und ohne laufende Vbox weiterzuleiten, und die Ports werden nie weitergeleitet.
Ich habe auch versucht, den Port an eine nicht vorhandene IP weiterzuleiten:
iptables -t nat -A PREROUTING -p udp -d 192.168.1.10 --dport 500 -j DNAT --to-destination 192.168.1.30:500
iptables -A FORWARD -p udp -d 192.168.1.30 --dport 500 -j ACCEPT
Hier existiert die IP 192.168.1.30 also nicht, aber wenn ich „nc -u 192.168.1.10 500“ in einer Sitzung ausführe, kann ich weiterhin Pakete empfangen, die auf dem Host lauschen (IP von 192.168.1.10).
Ich habe versucht, TCP-Port 3222 auf Port 22 weiterzuleiten, damit ich es ohne Netcat testen kann, aber das funktioniert nicht
root@mike-TravelMate-8371:~/nat# iptables -t nat -S;iptables -S
-P PREROUTING ACCEPT
-P INPUT ACCEPT
-P OUTPUT ACCEPT
-P POSTROUTING ACCEPT
-A PREROUTING -d 192.168.1.10/32 -p tcp -m tcp --dport 3222 -j DNAT --to-destination 192.168.1.10:22
-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-A FORWARD -d 192.168.1.10/32 -p tcp -m tcp --dport 22 -j ACCEPT
root@mike-TravelMate-8371:~/nat# telnet 192.168.1.10 22
Trying 192.168.1.10...
Connected to 192.168.1.10.
Escape character is '^]'.
SSH-2.0-OpenSSH_7.2p2 Ubuntu-4ubuntu2.4
^C
Connection closed by foreign host.
root@mike-TravelMate-8371:~/nat# telnet 192.168.1.10 3222
Trying 192.168.1.10...
telnet: Unable to connect to remote host: Connection refused
root@mike-TravelMate-8371:~/nat#
Hier kann ich den SSH-Port direkt über Port 22 erreichen, aber nicht über Port 3222, daher funktioniert die Weiterleitung nicht.
Antwort1
Iptables-Regeln bleiben nach einem Neustart nicht bestehen. Möglicherweise müssen Sie die Regeln nach dem Neustart wieder hinzufügen oder iptables-save / iptables-persistent verwenden. Siehe diesen Link. Wie kann ich einen bestimmten Satz von iptables-Regeln dauerhaft machen?
Antwort2
Hatte das gleiche Bedürfnis und habe es mit diesen beiden Befehlen zum Laufen gebracht. Ich musste nur lokale Anrufe umleiten, 127.0.0.1
kann aber durch die externe IP ersetzt werden
sudo iptables -t nat -A PREROUTING -s 127.0.0.1 -p tcp --dport 1234 -j REDIRECT --to 1235
sudo iptables -t nat -A OUTPUT -s 127.0.0.1 -p tcp --dport 1234 -j REDIRECT --to 1235