Iptables

配置 iptables 為本地網路設置預設網關

  • January 8, 2021

我有一個 ip 為 192.168.1.1 的 openwrt 路由器。我要做的是在區域網路中設置代理伺服器(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通信,代理伺服器都可以攔截轉發,很好。但是,我發現這兩個設備也相互通信,這些區域網路通信似乎沒有轉發到代理伺服器。是什麼原因?如何將這些流量轉發到代理伺服器?

測試:為了弄清楚配置iptables是否有用,我添加了一條測試規則:

iptables -t mangle -A PREROUTING -j DROP -s 192.168.1.131

在我看來,如果這條規則有效,那麼 ip 244 的設備將不會收到來自 ip 131 的設備的任何流量,這證明 iptables 可以用於 LAN 通信。但是,我使用 131 設備將 tcp 流量發送到 244 設備,並且可以正常工作。我懷疑配置 iptables 不能幫助我將這些 LAN 流量轉發到我的代理伺服器。我對嗎?

我假設你的 IP 子網是192.168.1.0/24,這意味著所有以 開頭的 IP 地址192.168.1都在同一個 L2 廣播域中,即連接到同一個交換機。

位於同一 IP 子網中的設備通過第 2 層“連接”直接相互通信,不會發生第 3 層路由。

IPTables 是一種對不同子網之間的路由數據包執行防火牆的機制。它看不到相同子網主機相互發送的任何流量。

如果要在兩台主機之間安裝防火牆,有幾個選項:

  1. 將主機移動到不同的子網(例如192.168.1.0/24192.168.2.0/24),並在兩個子網之間建立路由器路由。
  2. 安裝兩個不同的乙太網網段,並將您的路由器配置為網段之間的網橋。然後可以配置 IPTables 來過濾兩個乙太網段之間的數據包。

引用自:https://serverfault.com/questions/1049022