使用 OpenVPN tun 设备处理特定请求

使用 OpenVPN tun 设备处理特定请求

我已经使用配置设置了 OpenVPN 连接route-nopull。因此现在客户端的配置中没有添加任何特殊路由,只创建了一个 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 的一个服务器的接口即可pingtun0

 ping -I tun0 173.194.112.24

这再次没有带来任何结果。

仅供参考:当我设置 OpenVPN 以创建 TAP 接口(而不是 TUN 接口)时,我收到“目标主机无法访问”错误

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

我必须添加哪些路线才能实现此功能?

答案1

经过一番搜索,我找到了答案乔治·凯西(Georgie Casey)在这篇博客中

配置no-pull保留,但每次连接后都需要添加这些路由:

ip route add default via  {{P-t-P-IP}}          dev tun0 table 10
ip rule add from          {{tun0-inet addres}}  table 10

例如,您可以从 ifconfig (ips 已修改) 获取这些值:

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

您需要为想要通过 VPN 隧道路由的目的地添加路由,如下所示:

route add <destip> gw <server IP>

<destip>您要通过 VPN 路由的目标 IP 在哪里,以及<server ip>是网络中 OpenVPN 服务器的 IP 13.0.9.

顺便说一句,您不应该在私有 VPN 中使用可公开路由的 IP 地址。您必须使用 RFC1918 中定义的某些网络。

看到你原来的问题后仅将 openvpn 设置为接口设备route-nopull,您应该在客户端配置中删除,并push "redirect-gateway def1"从服务器配置文件中删除。

然后你可以添加:

push "route <serverip> 255.255.255.255"

到服务器配置文件。这告诉服务器告诉客户端<serverip>通过 OpenVPN 服务器进行路由。

相关内容