Routing

如何通過特定介面為特定程序路由流量

  • May 28, 2019

我有一個腳本,每 15 分鐘從 cron 執行一次。該腳本旨在 ping 我的 DNS 伺服器以更新動態變化的 IP。我希望這個腳本通過wlan界面而不是eth0.

但是,其他程序應用eth0作訪問 Internet 的主要介面。

如何僅針對特定程序執行此操作而不干擾其他程序?有沒有辦法通過介面來引導流量,比如引導標準輸出?喜歡ls -al > /dev/tty2'。可以chroot通過給我一個沙盒環境來幫助我嗎?

解決方法是設置高級路由可以使用的Netfilter包標記。無法通過程序 id 進行匹配,但 Netfilter 允許匹配程序 UID 或 GID。在這種情況下,創建一個新的系統使用者似乎是最簡單的解決方案,特別是為此任務。

iptables -t mangle -A OUTPUT -m owner --uid-owner wlanping -j MARK --set-mark 42

在 /etc/iproute2/rt_tables 中創建一個新的路由表(forecewlan)並選擇 wlan 網關作為預設網關:

ip route add default via $WLAN_GATEWAY

並強制將此路由表用於具有此標記的數據包:

ip rule add fwmark 42 table forcewlan

也許您還必須從主路由表中複製此類條目:

192.168.0.0/24 dev wlan0  proto kernel  scope link  src 192.168.0.100

引用自:https://unix.stackexchange.com/questions/66203