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
wlp8s1
ist meine drahtlose Schnittstelle mit meinem Heimnetzwerk verbunden, virbr0
ist 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: external
und 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 2022
auf 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