我有一个每 15 分钟从 cron 运行一次的脚本。该脚本旨在 ping 我的 DNS 服务器以更新动态变化的 IP。我希望这个脚本通过接口wlan
而不是eth0
.
然而,其他进程应该用作eth0
访问互联网的主要接口。
如何仅针对特定进程执行此操作而不干扰其他进程?有没有办法像引导标准输出一样通过接口引导流量?喜欢ls -al > /dev/tty2'
。可以chroot
通过给我一个沙盒环境来帮助我吗?
答案1
解决办法是设置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