我已经使用配置设置了 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 的一个服务器的接口即可ping
:tun0
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 服务器进行路由。