我有一个 openwrt 路由器,ip 为 192.168.1.1。我想做的是在 LAN 中设置一个代理服务器(192.168.1.249),并拦截来自两个设备(192.168.1.244、192.168.1.131)的所有通信。我使用的方法是将代理服务器设置为默认网关,我在我的 openwrt 路由器上配置了以下内容。
iptables -t mangle -A PREROUTING -j MARK --set-mark 3 -p tcp -s 192.168.1.131
iptables -t mangle -A PREROUTING -j MARK --set-mark 3 -p tcp -s 192.168.1.244
# Set default gateway as the proxy server in table 2
ip route add default via 192.168.1.249 table 2
# Forward traffic with mark 3 to table 2
ip rule add fwmark 3 table 2
经过我的测试,对于两个设备的所有WAN通信,代理服务器都可以拦截并转发,这是很好的。但是我发现这两个设备也互相通信,并且这些 LAN 通信似乎没有转发到代理服务器。这是什么原因?我该如何将这些流量转发到代理服务器?
测试:为了搞清楚配置iptables是否有用,我添加了一条规则进行测试:
iptables -t mangle -A PREROUTING -j DROP -s 192.168.1.131
我认为,如果此规则有效,则 ip 为 244 的设备将不会收到来自 ip 为 131 的设备的任何流量,这证明 iptables 可以用于 LAN 通信。但是,我使用 131 设备将 tcp 流量发送到 244 设备,并且它可以工作。我怀疑配置 iptables 不能帮助我将这些 LAN 流量转发到我的代理服务器。我是对的吗?
答案1
我假设您的 IP 子网是192.168.1.0/24
,这意味着所有以 开头的 IP 地址192.168.1
都在同一个 L2 广播域中,即连接到同一个交换机。
位于同一 IP 子网中的设备通过第 2 层“连接”直接相互通信,不存在第 3 层路由。
IPTables 是一种对不同子网之间的路由数据包执行防火墙的机制。它看不到同一子网主机之间发送的任何流量。
如果您想在两台主机之间安装防火墙,有以下几个选择:
- 将主机移至不同的子网(例如
192.168.1.0/24
和192.168.2.0/24
),并使路由器在两个子网之间路由。 - 安装两个不同的以太网段,并将路由器配置为两个段之间的桥梁。然后可以配置 IPTables 来过滤两个以太网段之间的数据包。