Firewalld-Weiterleitung zwischen Zonen funktioniert nicht

Firewalld-Weiterleitung zwischen Zonen funktioniert nicht

Ich habe einen CentOS 7 KVM-Hypervisor, auf dem mehrere VMs laufen, die für die Verwendung von NAT-Netzwerken konfiguriert sind.

Auf diesen VMs laufen ihre Dienste, von denen SSH für Administrationszwecke der wichtigste ist. Ich möchte Ports auf dem Hypervisor zuweisen, die mit Firewalld an die VMs weitergeleitet werden.

Mein Hypervisor hat folgende Schnittstellen:

3: wlp8s1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP qlen 1000
    link/ether 94:0c:6d:c4:b8:12 brd ff:ff:ff:ff:ff:ff
    inet 192.168.1.30/24 brd 192.168.1.255 scope global dynamic wlp8s1
       valid_lft 2627sec preferred_lft 2627sec
    inet6 2a02:a03f:268e:3e00:960c:6dff:fec4:b812/64 scope global noprefixroute dynamic
       valid_lft 345640sec preferred_lft 345640sec
    inet6 fe80::960c:6dff:fec4:b812/64 scope link
       valid_lft forever preferred_lft forever
4: virbr0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP
    link/ether 52:54:00:64:af:d6 brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.1/24 brd 192.168.122.255 scope global virbr0
       valid_lft forever preferred_lft forever

wlp8s1ist meine drahtlose Schnittstelle mit meinem Heimnetzwerk verbunden, virbr0ist es eine interne KVM-Netzwerkschnittstelle.

IPV4-Weiterleitung ist aktiviert:

firewall-cmd --zone=external --add-forward-port=port=2022:proto=tcp:toport=22:toaddr=192.168.122.13

Ich verwende 2 Zonen: externalund dmz:

dmz
  interfaces: virbr0
external
  interfaces: wlp8s1

Eine der VMs ist ein Datenbankserver mit der folgenden Netzwerkkonfiguration:

2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP qlen 1000
    link/ether 52:54:00:df:79:1e brd ff:ff:ff:ff:ff:ff
    inet 192.168.122.13/24 brd 192.168.122.255 scope global dynamic eth0
       valid_lft 2634sec preferred_lft 2634sec
    inet6 fe80::5054:ff:fedf:791e/64 scope link
       valid_lft forever preferred_lft forever

und führt sshd aus, das auf Port 22 lauscht:

# systemctl status sshd
sshd.service - OpenSSH server daemon
   Loaded: loaded (/usr/lib/systemd/system/sshd.service; enabled; vendor preset: enabled)
   Active: active (running) since Sun 2016-05-22 20:08:45 CEST; 45min ago
...

# ss -ntl
State       Recv-Q Send-Q              Local Address:Port                             Peer Address:Port
LISTEN      0      128                             *:22                                          *:*
LISTEN      0      128                            :::22                                         :::*

Ich habe also versucht, dem Tutorial und der offiziellen Dokumentation zu folgen, was mich zu folgender Befehlskette (auf dem Hypervisor) führte:

# firewall-cmd --zone=external --add-port=2022/tcp
success
# firewall-cmd --zone=external --add-forward-port=port=2022:proto=tcp:toport=22:toaddr=192.168.122.13
success

aber leider (von meinem Laptop, der mit meinem Heimnetzwerk verbunden ist):

$ ssh 192.168.1.30 -p 2022
ssh: connect to host 192.168.1.30 port 2022: Connection refused

Dinge, die ich getestet habe:

TCP-Dumps während der Ausgabe ssh 192.168.1.30 -p 2022auf meinem Laptop:

Auf dem Hypervisor:

# tcpdump -i wlp8s1 port 2022
21:02:50.661181 IP laptop.38052 > hypervisor.down: Flags [S], seq 885834855, win 29200, options [mss 1460,sackOK,TS val 4732781 ecr 0,nop,wscale 7], length 0

Auf der VM werden keine Pakete empfangen

Ich kann vom Hypervisor aus per SSH auf die VM zugreifen

Wenn ich den Firewalld-Weiterleitungsbefehl wie folgt ändere:

firewall-cmd --zone=external --add-forward-port=port=2022:proto=tcp:toport=22:toaddr=192.168.1.30

Ich kann über Port 2022 per SSH auf den Hypervisor zugreifen. Könnte dies bedeuten, dass es etwas mit den Zonen zu tun hat?


Ich wäre für jede Hilfe oder zusätzliche Dinge, die ich testen könnte, sehr dankbar! Danke!


PS

Ich habe diese ähnliche Frage gefunden, die darauf hinweist, dass Firewalld defekt ist: Fedora 21-Portweiterleitung mit Firewalld (Firewall-cmd); wie funktioniert das WIRKLICH? Oder funktioniert es überhaupt?

aber ich hoffe, hier mit den zusätzlichen Informationen, die ich hoffentlich bereitgestellt habe, eine Lösung zu finden :).

Antwort1

Vielleicht möchten Sie ein paar Konfigurationen überprüfen. Haben Sie die IP-Weiterleitung im Kernel aktiviert, z. B. net.ipv4.ip_forward=1=> /etc/sysctl.conf?

Außerdem müssen Sie möglicherweise einen Befehl wie diesen ausführen, um Masquerade zu aktivieren:

firewall-cmd --zone=external --add-masquerade

verwandte Informationen