Ubuntu 10.10ボックスにUSBセルラーモデムとホームLAN接続があります。
どちらも独立して動作します。
両方を同時に接続する方法を知り、どのアプリケーションがどのデバイスを使用してインターネットに接続するかを指定できるようにしたいと考えています。
誰でもこれを行う方法を知っていますか?
Ubuntu 10.10ボックスにUSBセルラーモデムとホームLAN接続があります。
どちらも独立して動作します。
両方を同時に接続する方法を知り、どのアプリケーションがどのデバイスを使用してインターネットに接続するかを指定できるようにしたいと考えています。
誰でもこれを行う方法を知っていますか?
回答:
どのパケットがどこに行くかをどのように決定したいかに応じて、いくつかの可能性があります。それらのほとんどは、TCP / IPネットワークがLinuxでどのように機能するかをある程度理解する必要があります。複雑なことを行うために知っておく必要がある主なツールは、iptables
(Ubuntu:iptables )とiproute2(ip
コマンド)(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
ます。たとえば、次のコマンドは特別なルーティングテーブルを設定してeth0
、1 とマークされたすべてのパケットが経由し、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
コマンドを実行するというスクリプトを作成することをお勧めします。このスクリプトは、ネットワークインターフェイスが起動するたびに実行されます。その名前がa 0
で始まるため、そのプロセスの早い段階で、ルートが配置されることを期待するアプリケーション固有のセットアップの前に実行されます。/etc/network/if-down.d/
インターフェイスの1つがダウンしたときに何かを実行したい場合のために、対称があります。(関連するすべてのルートは自動的に消去され、他のインターフェースにフォールバックしたい場合、一部のパケットが取り残される可能性があります。)
ifupスクリプトはに記載されていinterfaces(5) man page
ます。知っておくべき主なことは、アップまたはダウンするインターフェイスの名前が環境変数にあることですIFACE
。他のインターフェイスがすでに稼働しているかどうかを確認できますif ifconfig | sed 's/ .*//' | grep -Fqx 'eth0'; then …
。
iptables -t nat -A POSTROUTING -o tun0 -j SNAT --to-source ppp_ip
。ここで、ppp_ip
そのアダプタのIPアドレスです。次に、でstrict rp_filter
をオフにする必要があります/proc/sys/net/ipv4/config/ppp0/rp_filter
。リラックスモード(2)に設定すると機能します