我已经使用带有默认 NAT Bridge 的 libvirt 创建了一个 VM 客户机。(主机和客户机 Ubuntu 14.04 服务器)在客户机上创建 SSH 允许规则并启用 ufw 后,我无法再连接到客户机。
从系统日志(来宾的):
10月6日 17:36:51 ubuntu 内核:[5969.693057] [UFW BLOCK] IN=eth0 输出=MAC=52:54:00:ea:b5:2e:fe:54:00:ea:b5:2e:08:00 SRC=192.168.122.1 DST=192.168.122.152 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=5379 DF PROTO=TCP SPT=34376 DPT=22 窗口=29200 RES=0x00 SYN URGP=0
ufw 的状态(在客户机上):
root@ubuntu:~# ufw status verbose
Status: active
Logging: on (low)
Default: deny (incoming), allow (outgoing), disabled (routed)
New profiles: skip
To Action From
-- ------ ----
Anywhere ALLOW IN 148.251.139.136 22/tcp
Anywhere ALLOW IN 148.251.139.133 22/tcp
Anywhere ALLOW IN 141.7.0.0/16 22/tcp
Anywhere ALLOW IN 192.168.122.0/24 22/tcp
Anywhere ALLOW IN 192.168.122.1 22/tcp
148.251.139.136 是主机的 IP,客户机是 192.168.122.152。我不知道为什么 ufw 会阻止主机/NAT 允许的 IP。
如果我在客户机上禁用 ufw,我可以通过 SSH 从主机连接而不会出现问题。
编辑:澄清一下,这些是来宾的日志。NAT 路由正在运行。问题似乎出在 VM 来宾端。
答案1
经过多次反复尝试后我终于找到了解决方案:
代替:
Anywhere ALLOW IN 192.168.122.0/24 22/tcp
正确的规则应该是:
22/tcp ALLOW IN 192.168.122.0/24
我错误地指定了源端口而不是目标端口。这是由于使用 ufw allow 命令的缩写形式造成的:
ufw allow from 192.168.122.0/24 port 22 proto tcp
正确形式:
ufw allow from 192.168.122.0/24 to any port 22 proto tcp