如何通过特定接口为特定进程路由流量

Lor*_*oh. 5 routing route

我有一个每 15 分钟从 cron 运行一次的脚本。该脚本旨在 ping 我的 DNS 服务器以更新动态更改的 IP。我希望这个脚本通过wlan接口ping而不是eth0.

但是,其他进程应用eth0作访问 Internet 的主要接口。

如何在不干扰其他进程的情况下仅针对特定进程执行此操作?有没有办法通过接口引导流量,比如引导标准输出?喜欢ls -al > /dev/tty2'。可以chroot通过给我一个沙盒环境来帮助我吗?

Hau*_*ing 9

解决办法是设置高级路由可以使用的Netfilter包标记。无法通过进程 ID 进行匹配,但 Netfilter 允许匹配进程 UID 或 GID。在这种情况下,创建一个新的系统用户似乎是最简单的解决方案,特别是为此任务。

iptables -t mangle -A OUTPUT -m owner --uid-owner wlanping -j MARK --set-mark 42
Run Code Online (Sandbox Code Playgroud)

在 /etc/iproute2/rt_tables 中创建一个新的路由表(forecewlan)并选择 wlan 网关作为默认网关:

ip route add default via $WLAN_GATEWAY
Run Code Online (Sandbox Code Playgroud)

并强制将此路由表用于带有此标记的数据包:

ip rule add fwmark 42 table forcewlan
Run Code Online (Sandbox Code Playgroud)

也许您还必须从主路由表中复制此类条目:

192.168.0.0/24 dev wlan0  proto kernel  scope link  src 192.168.0.100
Run Code Online (Sandbox Code Playgroud)