Ubuntu10.10ボックスにUSBセルラーモデムとホームLAN接続があります。
どちらも独立して動作します。
両方を同時に接続する方法を知り、どのアプリケーションがどのデバイスを使用してインターネットに接続するかを指定できるようにしたい。
誰かがこれを行う方法を知っていますか?
どのパケットをどこに送るかをどのように決定するかに応じて、いくつかの可能性があります。それらのほとんどは、LinuxでTCP/IPネットワークがどのように機能するかをある程度理解する必要があります。複雑なことをするために知っておく必要のある主なツールは iptables
(Ubuntu: iptables )および iproute2(ip
command) (Ubuntu: iproute 、 iproute-doc )。
ターゲットIPアドレスで完全に区別できる場合は、簡単です。必要に応じてIPアドレスをルーティングします。たとえば、次のコマンドを実行すると、1.2.3。xおよび1.2.4.2のすべてのパケットが_ppp0
_およびその他のパケットを経由します。 _eth0
_経由で移動します。
_route add -net 1.2.3.4/24 ppp0
route add -Host 1.2.4.2 ppp0
route add -net 0.0.0.0/0 eth0
_
より複雑な要件については、iptables
および_ip route
_の使用を開始する必要があります。たとえば、次のコマンドは、1とマークされたすべてのパケットが_eth0
_を介して送信され、2とマークされたすべてのパケットが_ppp0
_を介して送信されるように特別なルーティングテーブルを設定します(localhost
向けのパケットを除く)ループバックインターフェイスに固執します)。
_ip rule add fwmark 1 table 1
ip route add 127.0.0.0/0 table 1 dev lo
ip route add 0.0.0.0/0 table 1 dev eth0
ip rule add fwmark 2 table 2
ip route add 127.0.0.0/8 table 2 dev lo
ip route add 0.0.0.0/0 table 2 dev ppp0
_
これで、iptables
を使用して発信パケットを「マングル」し、パケットが通過するルートを決定するマークを追加できます。たとえば、すべての送信SMTPトラフィック(ポート25)を_eth0
_経由で送信し、すべてのトラフィックをユーザーproxy
として実行されているアプリケーションから_ppp0
_経由で送信する方法を次に示します。
_iptables -t mangle -A OUTPUT -p tcp --dport 25 -j MARK --set-mark 1
iptables -t mangle -A OUTPUT -m owner --uid-owner proxy -j MARK --set-mark 2
_
参照 インターネットに接続された2つのネットワークインターフェイス。ドメイン名に応じて使用するものを選択してください および 異なるネットワークインターフェイスにソフトウェアをバインド 。
両方のインターフェイスが接続されているときにこれらのコマンドを実行するように調整する必要があります。必要なコマンドを実行する_/etc/network/if-up.d/0justin-routes
_というスクリプトを作成することをお勧めします。このスクリプトは、ネットワークインターフェイスが起動するたびに実行されます。その名前は_0
_で始まるため、ルートが適切に配置されていることを期待する可能性のあるアプリケーション固有のセットアップの前に、そのプロセスの早い段階で実行されます。インターフェイスの1つがダウンしたときにも処理を実行したい場合に備えて、対称的な_/etc/network/if-down.d/
_があります。 (関連するすべてのルートは自動的に消去されるため、他のインターフェイスにフォールバックする場合は、一部のパケットが取り残される可能性があります。)
Ifupスクリプトは interfaces(5) man page
に記載されています。知っておくべき主なことは、起動または停止するインターフェースの名前が環境変数IFACE
にあるということです。他のインターフェースがすでに_if ifconfig | sed 's/ .*//' | grep -Fqx 'eth0'; then …
_で稼働しているかどうかを確認できます。