現在、リモートubuntuVPSにPPTP VPNを設定しています。特定のアプリケーションにVPNを使用してインターネットにアクセスしてもらいたいです(rtorrent、irssiなど)。現在、このように設定されています:
eth0リンクencap:Ethernet HWaddr 00:16:3e:94:38:ce inet addr:66.xxx.xxx.xxx Bcast:66.xxx.xxx.xxx Mask:255.255.255.0
eth1 Link encap:Ethernet HWaddr 00:16:3e:d7:58:a1 inet addr:10.2.0.111 Bcast:10.255.255.255 Mask:255.0.0.0
lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0
ppp0リンクencap:Point-to-Pointプロトコルinet addr:192.168.10.244 P-t-P:192.168.9.1マスク:255.255.255.255
基本的に、この問題のマニフェストを見た方法は次のとおりです。
走ると
curl --interface eth0 checkip.dyndns.com
私は得る
<html><head><title>Current IP Check</title></head><body>Current IP Address: 66.xxx.xxx.xxx</body></html>
そして私が走るとき
curl --interface ppp0 checkip.dyndns.com
私は得る
<html><head><title>Current IP Check</title></head><body>Current IP Address: 95.xxx.xxx.xxx</body></html>
どちらが正しい。
しかし、私が走ると
curl --interface 192.168.10.244 checkip.dyndns.com
タイムアウトして何も得られません。 192.168.10.244はppp0のIPアドレスであり、上記のコマンドと何ら変わらないはずなので、これは意味がないようです。私は何かが足りないのですか?これをcurlで機能させることができれば、rtorrentとirssiでも同様に機能させることができます。この種のことについては、curlをテストする方が簡単です。この問題に取り組むための良い出発点はありますか?
編集:それを修正しました!これが私がそれをした方法です。
まず、新しいルーティングテーブルを作成しました。
# echo "200 vpn" >> /etc/iproute2/rt_tables
次に、ppp0 IPアドレスから送信されたリクエストが、その新しいテーブルからルックアップするためのルールを作成しました。
# ip rule add from 192.168.10.244 table 200
次に、そのテーブルにppp0を使用するルールを作成しました。
# ip route add default dev ppp0 table 200
それは完璧に動作します!以前に失敗したcurlコマンドを試行すると、次のようになります。
# curl --interface 192.168.10.244 checkip.dyndns.com
<html><head><title>Current IP Check</title></head><body>Current IP Address: 95.xxx.xxx.xxx</body></html>
あなたの推論は間違っています。 IPアドレスにバインドすると、送信元IPアドレスのみが選択されます。制御したい目的地までのルートには影響しません。
やりたいことを行うには、ソースベースルーティングと呼ばれるポリシールーティングの形式を設定する必要があります。これは通常、接続ごとに1つずつ、2つのルーティングテーブルを作成し、ローカルの送信元IPアドレスに基づいて使用するルーティングテーブルを決定することによって行われます。 ポリシールーティング に関する多くの ハウツー のいずれかを参照してください。