我正在运行ubuntu12.04,并且只希望vpn用于特定的应用程序,这些应用程序可以绑定到vpn端口(地址)。如果我用通过VPN端口路由的所有流量连接到VPN,一切都正常(如下面的第二条路由所示)。如果我选中选项“只将此连接用于其网络上的资源”,则该路由看起来像我所期望的那样,其他程序可以到达internet,但我无法连接到绑定到vpn端口的远程服务器,例如"telnet google.com 80 -b 10.187.1.9“,它似乎可以将数据包取出,但可能无法在。有人知道这条路线有什么问题吗?
使用“只对其网络上的资源使用此连接”设置:(不能仅使用tun0连接到远程服务器(10.187.1.9)
0.0.0.0 192.168.1.1 0.0.0.0 UG 0 0 0 eth2
10.187.1.1 10.187.1.9 255.255.255.255 UGH 0 0 0 tun0
10.187.1.9 0.0.0.0 255.255.255.255 UH 0 0 0 tun0
130.185.155.58 192.168.1.1 255.255.255.255 UGH 0 0 0 eth2
169.254.0.0 0.0.0.0 255.255.0.0 U 1000 0 0 eth2
192.168.1.0 0.0.0.0 255.255.255.0 U 1 0 0 eth2
192.168.100.0 0.0.0.0 255.255.255.0 U 0 0 0 eth2
默认选项:(我可以使用tun0连接到远程服务器,但所有流量都是通过tun0路由的)
0.0.0.0 10.187.1.9 0.0.0.0 UG 0 0 0 tun0
10.187.1.1 10.187.1.9 255.255.255.255 UGH 0 0 0 tun0
10.187.1.9 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 1000 0 0 eth2
185.3.135.58 192.168.1.1 255.255.255.255 UGH 0 0 0 eth2
192.168.1.0 0.0.0.0 255.255.255.0 U 1 0 0 eth2
192.168.100.0 0.0.0.0 255.255.255.0 U 0 0 0 eth2
发布于 2013-06-29 13:09:09
OpenVPN使用一个entre子网来容纳服务器端的虚拟接口以及连接的客户端。在您的例子中,这个子网似乎被配置为10.187.1.0/24。OpenVPN为服务器端分配10.187.1.1,并为每个客户端连接将其余的子网划分为较小的子网。默认情况下,由于兼容性原因,它将使用具有两个可用地址、一个网络地址和一个广播地址的/30,并将第一个可用地址分配给服务器,第二个分配给连接客户端。在您的示例中,这将是10.187.1.9 (服务器)和10.187.1.10 (客户机)。
因此,您的第一个问题是运行telnet google.com 80 -b 10.187.1.9
-您正在指示telnet
绑定到一个非本地地址,这是行不通的。第二个问题是Linux只在默认情况下通过评估目标地址来进行路由决策。由于google.com
解决的不是您网络的本地内容,也不包括任何其他路由,所以包通过默认路由中继,在您的情况下是192.168.1.1,而且它可能对10.187.1.0/24子网一无所知,因此它有效地丢弃了数据包。如果您需要这样的流量通过tun0
,您应该显式地告诉Linux:
echo "200 vpn" >> /etc/iproute2/rt_tables
ip rule add from 10.187.1.0/24 table vpn
ip route add table vpn default dev tun0
这将创建一个名为vpn
的附加路由表注册,如果数据包来自10.187.1.0/24子网,则添加使用此路由表的规则,并通过tun0 (即点对点接口,因此路由规范不需要网关地址)为通过vpn
表路由的所有通信添加默认路由。
发布于 2013-06-29 13:08:54
我不认为-b
选项能像你想的那样做。
如果执行tcpdump
,您将看到telnet
连接将退出默认网关,但源IP地址为10.187.1.9。问题是,即使源IP地址发生了更改--您的路由都是基于目的地的;在当前配置中,您将始终退出默认网关。
因此,要解决这个问题,有两种解决方案。
方法1,很简单--实际上你已经做过了。
方法2,一种基本的方法如下所示:
ip rule add from <source>/<mask> table <name>
ip route add default via <VPN GW> dev tun0 table <name>
或
ip route add default dev tun0 table <name>
其中<name>
将是/etc/iproute2/rt_tables
中的内容(您可以创建一个名称),或者可以使用一个数字。
资料来源:
http://www.saeedpazoki.com/how-to-implement-source-routing-with-linux/
https://serverfault.com/questions/519559
复制相似问题