我有一個 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 監控,或使用您的表達式路由表,僅發生在local
和main
規則表中。您可以使用以下命令檢查您的路由規則
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)系統上,您將看到三個預設規則表local
、main
和default
,通常只有在呼叫時才能看到該main
表netstat -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
。