首先这里是基本拓扑:
Internet
|
Gateway
|
Workstation---eth0---virbr0
|
+-----+-----+
| | |
vm1 vm2 vm3
我需要测试在我的工作站上运行的流量分析器,监听 eth0 上的某个端口(比如 8990)。
我想要的规则是“任何离开 virbr0 前往端口 80 的数据包都必须前往 eth0 上的端口 8990”。我在端口 8990 上运行的软件会自行检查 NAT 数据包处理,以便在检查完数据包后让数据包通过。
我一直在为此绞尽脑汁,想出各种不同的解决方案:
iptables -t nat -A PREROUTING -i virbr0 -p tcp --dport 80 -j DNAT \
--to 10.0.0.10:8990
mangle
我已经尝试了使用带有
--set-mark
和的表格的更通用的方法ip rule add fwmark
,但我没有得到它。
我想令我困惑的是所有东西都在同一个盒子上运行。
谢谢您的指导。
答案1
事实证明,这个问题毫无意义。Tcpdump 显示,虚拟机的子网 192.168.122.0/24 从未出现在内核路由决策中。我猜 libvirtd 在移交给内核网络堆栈之前会进行自己的网络处理。
回到绘图板。