特定のプロセスの特定のインターフェイスを介してトラフィックをルーティングする方法

特定のプロセスの特定のインターフェイスを介してトラフィックをルーティングする方法

15分ごとにcronで実行されるスクリプトがあります。このスクリプトは、私のDNSサーバーをpingして動的に変更されるIPを更新するように設計されています。このスクリプトwlaneth0

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

おすすめ記事