我有一个 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转发命令更改为:
firewall-cmd --zone=external --add-forward-port=port=2022:proto=tcp:toport=22:toaddr=192.168.1.30
我可以使用端口 2022 ssh 进入虚拟机管理程序。这是否意味着它与区域有关?
任何我可以测试的帮助或额外的东西将不胜感激!谢谢!
聚苯乙烯
我确实发现这个类似的问题表明防火墙已损坏: Fedora 21 使用firewalld(firewall-cmd)进行端口转发;它到底是如何运作的?或者,是吗?
但鉴于我希望提供的额外信息,我希望在这里找到解决方案:)。
答案1
您可能想检查一些配置。您是否在内核 ex net.ipv4.ip_forward=1
=>中打开了 ip 转发/etc/sysctl.conf
?
此外,您可能需要运行这样的命令来启用伪装:
firewall-cmd --zone=external --add-masquerade