Ubuntu 10.10ボックスにUSBセルラーモデムとホームLAN接続があります。
どちらも独立して動作します。
両方を同時に接続する方法と、どのアプリケーションがどのデバイスを使用してインターネットに接続するかを指定できるかどうかを知りたいです。
これを行う方法を知っている人はいますか?
答え1
どのパケットがどこに行くかを決定する方法に応じて、いくつかの可能性があります。ほとんどの場合、LinuxでTCP / IPネットワーキングがどのように機能するかを理解する必要があります。複雑なことをするときに知っておくべき主なツールは次のとおりです。iptables
(Ubuntu:iptables )とiproute2(ip
コマンド)(Ubuntu:IPルーティング 、iproute ドキュメント )。
宛先IPアドレスをまったく区別できる場合は簡単です。必要に応じてIPアドレスをルーティングできます。たとえば、次のコマンドを実行すると、すべてのパケットが1.2.3になります。X1.2.4.2 via ppp0
、その他のパケットvia via 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とマークされたすべてのパケットがviaを通過し、2とマークされているeth0
すべてのパケットがviaを通過するように特別なルーティングテーブルを設定します(ループバックインターフェイスに固定されているパケットを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
必要なコマンドを実行するために呼び出されるスクリプトを作成することをお勧めします。このスクリプトは、ネットワークインタフェースが起動されるたびに実行されます。名前はaで始まるため、0
ルーティングが予想されるアプリケーション固有の設定の前にプロセスの最初に実行されます。/etc/network/if-down.d/
インターフェイスの1つが失敗した場合でも、いくつかの操作を実行したい場合は対称性があります。 (すべての関連ルートが自動的に削除されるため、一部のパケットを他のインターフェイスに置き換えようとすると輻輳する可能性があります。)
ifup スクリプトは次の場所に記録されます。interfaces(5) man page
。知っておくべき主な点は、起動または終了するインターフェイスの名前が環境変数にあることですIFACE
。他のインターフェースが動作していることを確認できますif ifconfig | sed 's/ .*//' | grep -Fqx 'eth0'; then …
。