首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >使用拆分openvpn网络,无法通过vpn连接远程服务器。

使用拆分openvpn网络,无法通过vpn连接远程服务器。
EN

Server Fault用户
提问于 2013-06-29 12:15:30
回答 2查看 839关注 0票数 0

我正在运行ubuntu12.04,并且只希望vpn用于特定的应用程序,这些应用程序可以绑定到vpn端口(地址)。如果我用通过VPN端口路由的所有流量连接到VPN,一切都正常(如下面的第二条路由所示)。如果我选中选项“只将此连接用于其网络上的资源”,则该路由看起来像我所期望的那样,其他程序可以到达internet,但我无法连接到绑定到vpn端口的远程服务器,例如"telnet google.com 80 -b 10.187.1.9“,它似乎可以将数据包取出,但可能无法在。有人知道这条路线有什么问题吗?

使用“只对其网络上的资源使用此连接”设置:(不能仅使用tun0连接到远程服务器(10.187.1.9)

代码语言:javascript
运行
复制
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路由的)

代码语言:javascript
运行
复制
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
EN

回答 2

Server Fault用户

回答已采纳

发布于 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:

代码语言:javascript
运行
复制
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表路由的所有通信添加默认路由。

票数 0
EN

Server Fault用户

发布于 2013-06-29 13:08:54

我不认为-b选项能像你想的那样做。

如果执行tcpdump,您将看到telnet连接将退出默认网关,但源IP地址为10.187.1.9。问题是,即使源IP地址发生了更改--您的路由都是基于目的地的;在当前配置中,您将始终退出默认网关。

因此,要解决这个问题,有两种解决方案。

  1. 在所有连接中使用您的VPN --即使您的VPN成为默认网关。
  2. 实现源路由--或策略路由。这将创建基于数据包的源IP地址的路由。

方法1,很简单--实际上你已经做过了。

方法2,一种基本的方法如下所示:

代码语言:javascript
运行
复制
ip rule add from <source>/<mask> table <name>
ip route add default via <VPN GW> dev tun0 table <name> 

代码语言:javascript
运行
复制
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://superuser.com/a/377039/161569

票数 1
EN
页面原文内容由Server Fault提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://serverfault.com/questions/519559

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档