15分ごとにcronから実行されるスクリプトがあります。このスクリプトは、DNSサーバーにpingを実行して、動的に変化するIPを更新することを目的としています。このスクリプトでeth0
ではなくwlan
インターフェイスを介してpingを実行します。
ただし、他のプロセスでは、インターネットにアクセスするための主要なインターフェイスとしてeth0
を使用する必要があります。
他のプロセスを妨害することなく、特定のプロセスに対してのみこれをどのように行うのですか? stdoutを誘導するようなインターフェースを介してトラフィックを誘導する方法はありますか? 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