![具有多个IP的接口的firewall-cmd转发规则?](https://linux22.com/image/35710/%E5%85%B7%E6%9C%89%E5%A4%9A%E4%B8%AAIP%E7%9A%84%E6%8E%A5%E5%8F%A3%E7%9A%84firewall-cmd%E8%BD%AC%E5%8F%91%E8%A7%84%E5%88%99%EF%BC%9F.png)
我正在寻找一种使用firewall-cmd或其他命令来执行以下操作的方法。
传入公共接口有多个与其绑定的 IP 地址。如何仅转发其中一个 IP 地址的端口?
bond0 - public:
192.168.1.100 local machine SSHD bound here.
192.168.1.200 ---> forward SSH, HTTPS to 192.168.1.53 vm bridge on machine
当我转发给定端口上的所有传入流量时,我可以使用--forward-port
,但是我只想对发往一个目标 IP 的流量执行此操作。
另一种选择是将所有发往 0.200 的流量路由到 0.53 虚拟机,但也不知道如何实现这一点。
答案1
$ firewall-cmd --zone=external \
--add-forward-port=port=80:addr=172.16.1.1:proto=tcp:toport=80:toaddr=192.168.0.2
参考
使用“丰富语言”规则
将使用 TCP 协议从端口 4011 上的 1:2:3:4:6:: 收到的 IPv6 数据包转发到端口 4012 上的 1::2:3:4:7:
rule family="ipv6" source address="1:2:3:4:6::" forward-port to-addr="1::2:3:4:7" to-port="4012" protocol="tcp" port="4011"
答案2
我通过搜索相同的东西偶然发现了这一点,并最终自己找出了解决方案:这根本不可能--forward-port
,你需要一个丰富的规则。虽然原始海报早已不复存在,但希望这对像我这样的进一步搜索者有所帮助:
sudo firewall-cmd --add-rich-rule='rule family=ipv4 destination address="192.168.1.200" forward-port port="1-65535" protocol="tcp" to-addr="192.168.1.53"'
sudo firewall-cmd --add-rich-rule='rule family=ipv4 destination address="192.168.1.200" forward-port port="1-65535" protocol="udp" to-addr="192.168.1.53"'
我从来没有理由转发一系列端口,也没有转发到不同的IP,所以后一部分可能不完全正确,但相关部分(对于最初的问题)是destination address
丰富规则的一部分,会将其限制为对该 IP 的连接尝试。