隧道从eth0到tun0的stream量(OpenVPN)Ububtu 12.04

按照这里描述的步骤,我设法configurationVPN服务器和客户端(我可以ping两种方式)。 他们各自的configuration文件是:

服务器:

;local abcd port 1194 ;proto tcp proto udp push "redirect-gateway def1" ;dev tap dev tun ca ca.crt cert certificate_server.crt key certificate_server.key dh dh1024.pem server 10.8.0.0 255.255.255.0 ifconfig-pool-persist ipp.txt ;server-bridge 10.8.0.4 255.255.255.0 10.8.0.50 10.8.0.100 ;server-bridge ;push "route 192.168.10.0 255.255.255.0" ;push "route 192.168.20.0 255.255.255.0" ;client-config-dir ccd ;route 192.168.40.128 255.255.255.248 ;client-config-dir ccd ;route 10.9.0.0 255.255.255.252 ;learn-address ./script ;push "redirect-gateway def1 bypass-dhcp" ;push "dhcp-option DNS 208.67.222.222" ;push "dhcp-option DNS 208.67.220.220" ;client-to-client ;duplicate-cn keepalive 10 120 comp-lzo persist-key persist-tun status openvpn-status.log ;log openvpn.log ;log-append openvpn.log 

客户:

 client ;dev tap dev tun ;dev-node MyTap ;proto tcp proto udp remote <external_server_ip> 1194 ;remote my-server-2 1194 push "dhcp-option DNS 10.8.0.1" ;remote-random resolv-retry infinite nobind persist-key persist-tun ca ca.crt cert certificate_client.crt key certificate_client.key ns-cert-type server ;tls-auth ta.key 1 comp-lzo 

networking布局如下:我正在使用客户端连接到位于NAT后面的服务器。 我转发了NAT设备上的端口1194,并成功地ping通了服务器。 现在我想将来自客户端的eth0接口的所有stream量路由到tun0接口。 在客户端上运行ifconfig给出:

 eth0 Link encap:Ethernet HWaddr 01:02:03:04:05:06 inet addr:172.26.0.206 Bcast:172.26.255.255 Mask:255.255.0.0 inet6 addr: fe80::3285:a9ff:fe0b:fee8/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:15579878 errors:0 dropped:2 overruns:0 frame:0 TX packets:3774742 errors:0 dropped:0 overruns:0 carrier:4 collisions:0 txqueuelen:1000 RX bytes:7365014496 (7.3 GB) TX bytes:349016660 (349.0 MB) lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:132571 errors:0 dropped:0 overruns:0 frame:0 TX packets:132571 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:6718530 (6.7 MB) TX bytes:6718530 (6.7 MB) tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.8.0.6 PtP:10.8.0.5 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:0 errors:0 dropped:0 overruns:0 frame:0 TX packets:1296 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:0 (0.0 B) TX bytes:102968 (102.9 KB) wlan0 Link encap:Ethernet HWaddr 01:01:01:01:01:01 inet addr:192.168.0.103 Bcast:192.168.0.255 Mask:255.255.255.0 inet6 addr: fe80::de85:deff:fe32:241f/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:284664 errors:0 dropped:0 overruns:0 frame:0 TX packets:99157 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:177617284 (177.6 MB) TX bytes:32064393 (32.0 MB) 

同时在服务器输出上运行命令:

 eth0 Link encap:Ethernet HWaddr 06:05:04:03:02:01 inet addr:192.168.2.7 Bcast:192.168.2.255 Mask:255.255.255.0 inet6 addr: fe80::219:d1ff:fefe:de8a/64 Scope:Link UP BROADCAST RUNNING MULTICAST MTU:1500 Metric:1 RX packets:44596 errors:0 dropped:0 overruns:0 frame:0 TX packets:22418 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:1000 RX bytes:9082333 (9.0 MB) TX bytes:5007949 (5.0 MB) Interrupt:20 Memory:e3200000-e3220000 lo Link encap:Local Loopback inet addr:127.0.0.1 Mask:255.0.0.0 inet6 addr: ::1/128 Scope:Host UP LOOPBACK RUNNING MTU:16436 Metric:1 RX packets:394157 errors:0 dropped:0 overruns:0 frame:0 TX packets:394157 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:0 RX bytes:19763027 (19.7 MB) TX bytes:19763027 (19.7 MB) tun0 Link encap:UNSPEC HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 inet addr:10.8.0.1 PtP:10.8.0.2 Mask:255.255.255.255 UP POINTOPOINT RUNNING NOARP MULTICAST MTU:1500 Metric:1 RX packets:7615 errors:0 dropped:0 overruns:0 frame:0 TX packets:7 errors:0 dropped:0 overruns:0 carrier:0 collisions:0 txqueuelen:100 RX bytes:463861 (463.8 KB) TX bytes:588 (588.0 B) 

在我的客户端上,IPv4数据包转发已启用; 我的客户机上的路由表是: client:

 $ netstat -nr Kernel IP routing table Destination Gateway Genmask Flags MSS Window irtt Iface 0.0.0.0 10.8.0.5 128.0.0.0 UG 0 0 0 tun0 0.0.0.0 172.26.0.1 0.0.0.0 UG 0 0 0 eth0 10.8.0.1 10.8.0.5 255.255.255.255 UGH 0 0 0 tun0 10.8.0.5 0.0.0.0 255.255.255.255 UH 0 0 0 tun0 <server_external_ip> 172.26.0.1 255.255.255.255 UGH 0 0 0 eth0 128.0.0.0 10.8.0.5 128.0.0.0 UG 0 0 0 tun0 169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0 172.26.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0 192.168.0.0 0.0.0.0 255.255.255.0 U 0 0 0 wlan0 

而在服务器上:

服务器:

 0.0.0.0 192.168.2.1 0.0.0.0 UG 0 0 0 eth0 10.8.0.0 10.8.0.2 255.255.255.0 UG 0 0 0 tun0 10.8.0.2 0.0.0.0 255.255.255.255 UH 0 0 0 tun0 169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0 192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0 

我怎样才能在客户机上路由从eth0到tun0的所有stream量? 我试过在我的路由表中添加一个条目:

 sudo route add default gw 10.8.0.1 

输出是:

 SIOCADDRT: No such process 

另外,在这一步之后,连接停止工作,我不能再从客户端ping服务器; eth0上的stream量不能再被转发。

您的OpenVPN实例正在使用点对点模式,因此您的默认网关不是10.8.0.1。

看看你的客户端路由表,似乎OpenVPN客户端已经正确设置了路由,所以VPN服务器现在是你的默认网关(这是由服务器configuration中的redirect-gateway def1指示的):

 Destination Gateway Genmask Flags MSS Window irtt Iface 0.0.0.0 10.8.0.5 128.0.0.0 UG 0 0 0 tun0 128.0.0.0 10.8.0.5 128.0.0.0 UG 0 0 0 tun0 

所以你已经基本达到了你想要的 – 让所有原来通过eth0的stream量到达tun0。

如果您想知道为什么拨打VPN后无法访问Internet(无法访问其他网站),您可以按照@Bill的说法:在服务器上设置NAT和IP转发。

这也很简单:

 # sysctl -w net.ipv4.ip_forwarding = 1 # iptables -t nat -A POSTROUTING ! -o lo -j MASQUERADE 

如果你偏执,根据@ Bill的回答改变第二行。

将您本地子网中的stream量重新路由到tun0接口:

 iptables -t nat -A POSTROUTING -s 192.168.2.0/24 -o tun0 -j MASQUERADE 

你可以试试这个:

 route add -net 172.26.0.0 netmask 255.255.0.0 gw 10.0.8.5