web-dev-qa-db-ja.com

LinuxでのVPNルーティングの問題-IPアドレスにのみバインドできるアプリケーションを機能させる方法は?

現在、リモート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>
3
thatfunkymunki

あなたの推論は間違っています。 IPアドレスにバインドすると、送信元IPアドレスのみが選択されます。制御したい目的地までのルートには影響しません。

やりたいことを行うには、ソースベースルーティングと呼ばれるポリシールーティングの形式を設定する必要があります。これは通常、接続ごとに1つずつ、2つのルーティングテーブルを作成し、ローカルの送信元IPアドレスに基づいて使用するルーティングテーブルを決定することによって行われます。 ポリシールーティング に関する多くの ハウツー のいずれかを参照してください。

1
David Schwartz