route-nopull
構成でOpenVPN接続をセットアップしました。そのため、クライアントの構成に特別なルートは追加されず、次のようにTUNデバイスのみが作成されます。
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:13.0.9.88 P-t-P:13.0.9.88 Mask:255.255.255.224
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:150 errors:0 dropped:0 overruns:0 frame:0
TX packets:20 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:12498 (12.4 KB) TX bytes:2520 (2.5 KB)
その結果、デフォルトでは、どのトラフィックもVPNを通過しません。特定のリクエストにのみ必要なので、すばらしいです。
そして、私の問題があります:どうすればそれを行うことができますか?これは主にnode.jsで使用します。
次の例では、http.requestを使用して単純なGETリクエストを作成しますが、現在TUNインターフェイスに指定されているアドレスを指定します。
var http = require('http'),
url = require('url');
var options = {
localAddress: '13.0.9.88',
hostname: 'www.google.be',
path: '/',
method: 'GET',
port: 80
};
var req = http.request(options, function(res) {
res.setEncoding('utf8');
res.on('data', function (chunk) {
console.log('Body: ' + chunk);
});
});
req.end();
問題は、この要求が通過しないか、応答を受け取らないことです。
また、Googleのサーバーの1つへのtun0
インターフェースを介してping
を使用するだけで、より簡単なテストを試しました。
ping -I tun0 173.194.112.24
これも、結果が得られません。
Fyi:(TUNインターフェイスではなく)TAPインターフェイスを作成するようにOpenVPNをセットアップすると、「Destination HostUnreachable」エラーが発生します
VPNのIPのnetstat情報:
# netstat -rn | fgrep 13.0.9
13.0.9.88 0.0.0.0 255.255.255.224 U 0 0 0 tun0
これを有効にするには、どのルートを追加する必要がありますか?
かなり検索した後、私は答えを見つけました Georgie Caseyによるこのブログで :
no-pull
configは残りますが、各接続後にこれらのルートを追加する必要があります。
ip route add default via {{P-t-P-IP}} dev tun0 table 10
ip rule add from {{tun0-inet addres}} table 10
たとえば、ifconfig(ipsmodified)から取得できる値は次のとおりです。
tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:16.0.2.11 P-t-P:16.0.2.11 Mask:255.255.255.224
UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1
RX packets:66 errors:0 dropped:0 overruns:0 frame:0
TX packets:30 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:100
RX bytes:5344 (5.3 KB) TX bytes:2295 (2.2 KB)
次のように、VPNトンネルを介してルーティングする宛先のルートを追加する必要があります。
route add <destip> gw <server IP>
ここで、<destip>
はVPN経由でルーティングする宛先IPであり、<server ip>
は13.0.9.
ネットワーク内のOpenVPNサーバーのIPです。
ちなみに、プライベートVPNではパブリックにルーティング可能なIPアドレスを使用しないでください。 RFC1918で定義されているネットワークのいくつかを使用する必要があります。
元の質問を確認した後 openvpnをインターフェイスデバイスとしてのみセットアップ 、クライアント構成のroute-nopull
を削除し、サーバー構成ファイルからPush "redirect-gateway def1"
を削除する必要があります。
次に、以下を追加できます。
Push "route <serverip> 255.255.255.255"
サーバー構成ファイルに。これは、OpenVPNサーバー経由で<serverip>
をルーティングするようにクライアントに指示するようにサーバーに指示します。