У меня есть гипервизор Centos 7 KVM, на котором запущено несколько виртуальных машин, настроенных на использование сетей NAT.
Эти виртуальные машины запускают свои службы, из которых ssh является наиболее важным для целей администрирования. Я хотел бы назначить порты на гипервизоре, которые перенаправляются на виртуальные машины с помощью firewalld.
Мой гипервизор имеет следующие интерфейсы:
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
подключен ли мой беспроводной интерфейс к моей домашней сети, virbr0
является ли он внутренним сетевым интерфейсом kvms.
Переадресация IPV4 включена:
firewall-cmd --zone=external --add-forward-port=port=2022:proto=tcp:toport=22:toaddr=192.168.122.13
Я использую 2 зоны: external
и dmz
:
dmz
interfaces: virbr0
external
interfaces: wlp8s1
Одна из виртуальных машин представляет собой сервер базы данных со следующей сетевой конфигурацией:
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
и запускает sshd, прослушивающий порт 22:
# 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 :::*
Поэтому я попробовал следовать руководству и официальной документации, что привело меня к следующей цепочке команд (на гипервизоре):
# 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
но увы (с моего ноутбука, подключенного к домашней сети):
$ ssh 192.168.1.30 -p 2022
ssh: connect to host 192.168.1.30 port 2022: Connection refused
Что я проверил:
TCP-дампы при выдаче ssh 192.168.1.30 -p 2022
на моем ноутбуке:
На гипервизоре:
# 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
На виртуальной машине не принимаются пакеты
Я могу подключиться по ssh с гипервизора на виртуальную машину
Если я изменю команду firewalld forward на:
firewall-cmd --zone=external --add-forward-port=port=2022:proto=tcp:toport=22:toaddr=192.168.1.30
Я могу подключиться к гипервизору по ssh, используя его порт 2022. Может ли это означать, что это как-то связано с зонами?
Буду очень признателен за любую помощь или дополнительные вещи, которые я смогу протестировать! Спасибо!
ПС
Я нашел похожий вопрос, указывающий на то, что firewalld сломан: Переадресация портов Fedora 21 с помощью firewalld (firewall-cmd); как это ДЕЙСТВИТЕЛЬНО работает? Или работает?
но я надеюсь найти решение здесь, учитывая дополнительную информацию, которую я, надеюсь, предоставил :).
решение1
Вы можете проверить несколько конфигураций. Вы включили ip forwarding в ядре ex net.ipv4.ip_forward=1
=> /etc/sysctl.conf
?
Также вам может потребоваться выполнить команду вроде этой, чтобы включить маскарад:
firewall-cmd --zone=external --add-masquerade