求助:Proxmox节点防火墙为何阻止已配置放行的Netbird IP段流量?
兄弟,我之前折腾Proxmox防火墙的时候也踩过类似的坑,给你几个排查方向,应该能解决问题:
先查规则顺序! Proxmox防火墙是按从上到下的顺序匹配规则的,要是你的放行规则排在默认的拒绝规则后面,那根本不会生效。你去节点的防火墙界面看看,允许
dc/netbird访问22和8006的规则,是不是拖到了所有拒绝规则的前面?也可以在节点上敲pve-firewall rules命令,直接看规则的优先级排序。检查规则绑定的接口:节点的防火墙规则是要绑定到对应网络接口的!你是不是把规则绑到了物理网卡上,但Netbird用的是虚拟接口(比如
netbird0或者wt0)?容器走的是桥接接口,和节点本身的Netbird虚拟接口不是一回事。先在节点上用ip a命令找出Netbird的接口名,然后去防火墙规则里把接口改成这个虚拟接口,别选默认的“所有接口”或者物理网卡。验证别名是否真的生效:虽然你在数据中心级别建了
dc/netbird别名,但节点防火墙可能没正确识别它。你可以先把规则里的dc/netbird换成具体的100.64.0.0/10试试,如果换成具体段就通了,那就是别名的引用出问题了——要么重新建一遍数据中心别名,要么在节点级别单独建个相同的别名试试。排查集群重置后的默认策略:你之前加集群失败,大概率不仅清了规则,还改了节点防火墙的默认策略。去节点防火墙的“选项”里看看:
- 输入策略(Input Policy)是不是设成了
DROP?如果是,那除了你明确放行的规则,其他流量全拦,但有时候状态跟踪没开的话,哪怕放行规则也会出问题。 - 有没有开启“Enable Connection Tracking”(连接跟踪)?这个必须开,不然Proxmox防火墙没法识别已建立的连接,会把后续流量拦掉。
- 输入策略(Input Policy)是不是设成了
抓包确认流量是否真的到节点:在节点上敲
tcpdump -i any port 22 or port 8006,然后从Netbird客户端那边发起SSH或者8006的连接。要是能看到包进来但没响应,那肯定是防火墙的问题;要是连包都看不到,那得先查Netbird的路由配置——用ip route看看有没有100.64.0.0/10的路由指向Netbird的虚拟接口。最后试试重启防火墙服务:有时候规则配置了但没加载进去,在节点上执行
systemctl restart pve-firewall,等几秒再测试连接。
备注:内容来源于stack exchange,提问作者Timothy R. Butler

