ProxmoxVE_PVE防火牆_本機靜態路由_本機端口轉發_修改默認8006端口_旁路由VM
轉載注明來源: 本文鏈接 來自osnosn的博客,寫於 2021-03-29.
以下內容基於 pve 版本為 6.2-4
PVE 自身設置靜態路由
- 按 Debian 的設置來,pve 的網卡沒有使用 NetworkManager 管理。
所以直接修改/etc/network/interfaces
,記得 up/down 要對應。
在對應的 iface vmbr0 下面,添加靜態路由,使用 ip route 指令。
PVE 添加 nat 的 redirect 規則
- pve 的管理 web 口 8006,是寫死在 perl5 的模塊中。
/usr/share/perl5/PVE/Service/pveproxy.pm
如果要修改的話,要改好多個地方。包括防火牆,issue,……,太復雜。 - 所以還是考慮用 iptables 的 redirect 規則。重定向443端口。
- pve 的防火牆,只能添加 filter 表的過濾規則。無法添加 nat 表的規則。
為了不破壞 pve 的防火牆,就不另外安裝第三方防火牆服務了。
pve 也沒有 rc.local 可以寫。
只好寫在/etc/network/interfaces
中了,用 iptables 命令。
示例
iface vmbr0 inet static
address 10.123.123.99/24
gateway 10.123.123.250
...
up ip route add 10.0.0.0/8 via 10.123.123.1 proto static
down ip route del 10.0.0.0/8 via 10.123.123.1
post-up iptables -t nat -A PREROUTING -p tcp -d 10.123.123.99/32 --dport 443 -j REDIRECT --to-ports 8006
post-down iptables -t nat -D PREROUTING -p tcp -d 10.123.123.99/32 --dport 443 -j REDIRECT --to-ports 8006
修改 interfacces 文件后,重啟就會生效。
如果不想馬上重啟,手工執行一下添加的命令即可。
pve的防火牆開/關,不影響 nat 表中的內容。
開啟 PVE 的防火牆
- 集群 Datacenter -> Firewall -> Options -> Firewall 的值改為 Yes。 這個是防火牆總開關。
防火牆總開關打開后,節點就不能被 ping 通了。這是正常現象。如需被ping,自行在節點添加一條允許規則即可。 - 如果防火牆總開關為 No,下面的就不用做了。同時 VM 的防火牆也無法使用。
- 節點 Node -> Firewall -> Options -> Firewall 的值改為 Yes。
- 節點 Node -> Firewall 中添加規則,允許全網訪問,允許從any地址到自身10.123.123.99,端口TCP/8006.
因為,pve 缺省的防火牆規則,只允許 10.123.123.0/24 網段訪問 8006. - 或者,不添加規則,去改變管理的地址集ipset來實現。
缺省只允許 local network 訪問 8006 和 22。其實是因為缺省的管理ipset僅包含本地局域網。
可以參考文檔man pve-firewall
中的說明,修改這個管理的ipset(地址集)。
在文件/etc/pve/firewall/cluster.fw
中,添加[IPSET management]
,寫入允許的ip和IP范圍。
還能設置黑名單ipset[IPSET blacklist]
,不過黑名單是全局的,連vm都不能訪問。
- 節點 Node -> Firewall 中添加規則,允許全網訪問,允許從any地址到自身10.123.123.99,端口TCP/8006.
- 另外還有個地方限制管理的ip。(是應用層級的,非防火牆層級)。
文檔man pveproxy
中的說明,創建/etc/default/pveproxy
寫入配置項目 ALLOW_FROM=, DENY_FROM=, POLICY= - VM 客戶機的防火牆,按需使用。這里的規則只影響對應的 VM,不影響 pve 本身。
PVE 節點中有個旁路由器的 vm
- PVE的防火牆總開關No,這個旁路由工作正常。沒有問題。
- PVE的防火牆總開關Yes.
- pve同節點中其他vm使用這個旁路由,沒問題。
- pve節點外部的實體機,使用這個旁路由,可以ping通目標,但無法瀏覽目標網站。
通過查看 iptables 的規則。發現是 filter 表 FORWARD 鏈中第一條規則,
-A PVEFW-FORWARD -m conntrack --ctstate INVALID -j DROP
限制的。
這條規則在模塊/usr/share/perl5/PVE/Firewall.pm
中,受配置項nf_conntrack_allow_invalid
控制。 - 解決辦法,在
/etc/pve/nodes/<nodename>/host.fw
中的[OPTIONS]
中,
加入nf_conntrack_allow_invalid: 1
。
然后,重新開關一次pve的防火牆總開關即可。
- 【Proxmox VE中虛擬機非對等路由出站數據包被丟的情況分析】
PVE 節點中有個主路由器,且有ipv6
- VM 客戶機(路由器)的防火牆如果Yes
- 需要在
/etc/pve/firewall/<VMID>.fw
中,[OPTIONS]
中,加入radv: 1
。允許路由廣播。
- 需要在
- pve節點 和 vm客戶機 兩個地方的 Firewal->Options 中 NDP 也要設置為 Yes。允許網絡鄰居發現協議。