透過 iptables 進行路由

透過 iptables 進行路由

我有一個 VPN 用戶端,它會接觸路由表,然後繼續監視它,如果它被接觸則退出。這是端點(例如筆記型電腦)所需的設定。

我想使用一台小型 PC 作為 VPN 端點,並透過它為 LAN (192.168.0.0/24) 上的其他電腦路由。

由於我無法觸及路由表,並且所有資料包都強制通過 VPN 設備tun0,因此我想iptables可以幫助我將 192.168.0.0 網路的資料包 POSTROUTEing 返回到設備eth1

但我不確定這將如何工作,因為一旦退出,eth1它應該解析 IPtoMAC,因為它已經在目標網路上,我不知道資料包是否已經解析或在到達之前不會發生伊法斯。

有什麼提示嗎?

答案1

由於您沒有提供更多信息,我不確定如何最好地回答。

因此,我嘗試為您提供一些指導,故意忽略您無法修改路由表(您會明白為什麼閱讀我的建議):

取決於 VPN 用戶端和在哪裡它連接到核心的 FIB(轉送資訊庫),您可能會幸運,因為 VPN 的 FIB 監控,或使用您的表達式路由表,僅發生在localmain規則表中。您可以使用以下命令檢查您的路由規則

ip rule show

對於標籤“lookup”後面的每個字串(它們是規則表條目),您可以從 FIB 查詢相應的路由資訊,使用

ip route show table <name>

如果運氣好的話,您可以嘗試建立符合您要求的規則,並在規則查找表中優先考慮它。例如(我編造了一些東西來讓您領先),讓我們添加一條比main某些流程具有更高優先級的新規則:

ip rule add from 192.168.1.0/24 to 10.10.212.1/30 iif eth0 oif eth2 lookup 888 pref 12000
ip rule show
   0:   from all lookup local 
   12000:   from 192.168.1.0/24 to 10.10.212.1/30 iif eth0 oif eth2 lookup 888 
   32766:   from all lookup main 
   32767:   from all lookup default 

在標準 Linux(本文中為 Ubuntu)系統上,您將看到三個預設規則表localmaindefault,通常只有在呼叫時才能看到該mainnetstat -rn

現在我們想要用新的路由條目填入查找表 888 中的 FIB 條目:

ip route add default via 10.37.129.4 dev eth2 table 888

讓我們看看表 888 的路由條目是什麼樣子的:

ip route show table 888
  default via 10.37.129.4 dev eth2

我想你應該已經明白了。現在,關於您的特定路由需求,目前尚不清楚您到底想要實現什麼目標。確保在使用規則表時刷新路由快取:

ip route flush cache

請注意,使用 iproute2 架構,您基本上可以過濾和修改幾乎任何 FIB 條目;規則條目甚至可以基於 fwmarks 和/或 u32 分類器來製作,如下所示(範例取自策略路由簿):

tc filter add dev eth1 parent ffff: protocol ip prio 1 u32 \
    match ip src 10.1.1.0/24 classid :1
ip rule add fwmark 1 table 1 prio 15000 realms 3/4
ip route add default via 192.168.1.1 table 1 src 192.168.1.254
ip route flush cache

對於規則表條目中的混亂情況,很多年前我準備了一個小的 bash 片段,將我的系統恢復到原始路由規則狀態:

: ${KEEP:="local main default"}
while read prio rule; do
     continue=0
     for keep in ${KEEP}; do
         if [ "${rule//lookup ${keep}/}" != "${rule}" ]; then
             continue=1
         fi
     done
     if [ ${continue} -eq 0 ]; then
         ip rule del prio ${prio%%:*} ${rule//all/0/0}
     fi
done < <(ip rule show)

令人驚訝的是,似乎在存在十多年之後iproute2,似乎仍然只有少數人知道存在著一個超越經典的宇宙“破碎的”ifconfig諸如或 之類的工具netstat

相關內容