Centos

CentOS 8 上的埠轉發到帶有防火牆的 VM 不起作用

  • October 9, 2020

我剛剛在我的伺服器上設置了一個新的 CentOS 8,上面有一個 VM,我想用 firewalld 將一個埠從主機轉發到 VM(2228 到 22)。我添加了埠轉發,打開了偽裝並從我的桌面嘗試了它,這是輸出:

ssh: connect to host x.x.x.x port 2228: Connection refused

我已經檢查了系統上是否啟用了 ip 轉發,並檢查了我是否可以從主機訪問虛擬機,我可以。我也嘗試關閉 SELinux,但沒有任何改變。有趣的是,僅在主機上的埠轉發(例如 Host:1234 到 Host:22)有效。

這是我的防火牆區域:

public (active)
 target: default
 icmp-block-inversion: no
 interfaces: enp3s0
 sources: 
 services: dhcpv6-client ssh
 ports: 
 protocols: 
 masquerade: yes
 forward-ports: port=2228:proto=tcp:toport=22:toaddr=192.168.122.8
 source-ports: 
 icmp-blocks: 
 rich rules: 

在埠 2228 上執行 nmap 會返回該埠已關閉且未過濾,因此似乎有些東西在起作用,但不是全部。

正如 JDI 所建議的那樣,添加了一個帶有日誌記錄的豐富規則,但它似乎也不起作用:

`rule family="ipv4" forward-port port="2228" protocol="tcp" to-port="22" to-addr="192.168.122.8" log prefix="forward-log" level="debug"`

將 virbrX 添加到受信任區域並重試:firewall-cmd --add-interface=virbr0 --zone=trusted.

如果需要偽裝傳出的訪客流量,將轉發模式從 nat 更改為 route 不是解決方案。我快速而骯髒的黑客是

iptables -I FORWARD -o virbr0 –proto tcp –dport 22 -d 192.168.122.8 -m conntrack –ctstate NEW -j ACCEPT

但這必須在每個 firewall-cmd –reload 之後應用。

似乎 libvirt 不尊重 FirewalldBackend(在 CentOS 8 上預設為 nftables),並且 iptables hook 優先於 nftables。

引用自:https://serverfault.com/questions/1005400