So leiten Sie einen Port lokal um/weiter

So leiten Sie einen Port lokal um/weiter

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:

  1. TCP-Host 2222 zu Vbox-Gast 22
  2. UDP-Host 4500 zu Vbox-Gast 4500
  3. 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.1kann 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

verwandte Informationen