我在多宿主主机上安装了 Ubuntu 12.04。我尝试使用 iptables 将进入某个 IP 地址的 HTTP 数据包重新路由到另一个 IP 地址。
通过谷歌搜索,我相信在多宿主主机上有必要使用 CONNMARK 来标记传入连接,以便可以匹配相关的传出数据包。
然而,当我尝试使用短语“-j CONNMARK”时,我被告知没有这样的链。
如何在 Ubuntu 12.04 上使用‘-j CONNMARK’?
答案1
您必须加载connmark
内核模块:
sudo modprobe ipt_connmark
检查模块是否已加载:
lsmod | grep connmark
答案2
简单的重新路由流量不需要 CONNMARK;而是使用一对 DNAT/SNAT 来实现,例如:
-t nat -A PREROUTING -d 1.2.3.4 -j DNAT --to-destination 5.6.7.8
-t nat -A POSTROUTING -d 5.6.7.8 -j SNAT --to-source 5.6.7.9
在哪里
- 1.2.3.4 是人们连接的 IP 地址
- 5.6.7.8 是实际目标
- 5.6.7.9 是到达目标的接口的 IP