web-dev-qa-db-ja.com

特定のリクエストにOpenVPNtunデバイスを使用する

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

これを有効にするには、どのルートを追加する必要がありますか?

2
skerit

かなり検索した後、私は答えを見つけました 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)
2
skerit

次のように、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>をルーティングするようにクライアントに指示するようにサーバーに指示します。

1
Tero Kilkanen