首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >多子网静态路由

多子网静态路由
EN

Server Fault用户
提问于 2019-06-26 03:34:23
回答 1查看 378关注 0票数 0

我在构建跨越两个不同子网和vpn连接的静态路由时遇到了问题。我的拓扑如下:

  • 主机-A:inet 10.0.28.45网络掩码255.255.224.0广播10.0.31.255
  • 主机-B:inet 10.0.47.160网络掩码255.255.240.0广播10.0.47.255
  • 主机-C:inet 172.16.254.133网络掩码255.255.255.0广播172.16.254.255

我有一个从主机C到主机B的OpenVPN连接。OpenVPN连接位于tun0上,子网为192.168.100.0/24,因此主机-B的tun0地址为192.168.100.2,主机-C的地址为192.168.100.5。

主机-B已经启用ip转发,并且正在进行ip伪装.

我启动我的vpn连接,并可以到达主机-A从主机-C没有问题.我也想有一个主机-A到达主机-C。据我所知,要添加静态路由,您需要在与网关相同的子网上有一个主机。由于主机-A和主机-B位于不同的子网上,所以我在主机-A的路由表中添加了一个10.0.32.0子网。

我在主机A上的路由表如下所示:

代码语言:javascript
运行
复制
# ip route list
default via 10.0.0.1 dev eth0 
10.0.0.0/19 dev eth0 proto kernel scope link src 10.0.28.45
10.0.32.0/20 via 10.0.0.1 dev eth0 
169.254.0.0/16 dev eth0 scope link metric 1002 

然后,我尝试在10.0.32.0/20子网上添加一个路由到Host,如下所示:

代码语言:javascript
运行
复制
ip route add 192.168.100.0/24 via 10.0.47.160

但是我得到了错误: RTNETLINK答案:网络是无法到达的

我知道我试图在这里使用的网关不在主机-A所在的子网的范围之内。我通过上面的10.0.0.1添加了10.0.32.0/20子网,以提供该子网应该采用的路由( 10.0.47.160位于其中),但我不确定这是否是处理这种情况的正确方法。

我在主机-B上的路由表如下:

代码语言:javascript
运行
复制
$ ip route list
default via 10.0.32.1 dev eth0 
10.0.32.0/20 dev eth0 proto kernel scope link src 10.0.47.160 
169.254.0.0/16 dev eth0 scope link metric 1002 
192.168.100.0/24 via 192.168.199.2 dev tun0 
192.168.100.2 dev tun0 proto kernel scope link src 192.168.199.1 

我希望除192.168.100.0的流量外,所有流量都继续通过10.0.0.1退出eth0。

我觉得这是我问题的一部分,我在主机A的路由表中遗漏了一些东西,这就是为什么当我试图在192.168.100.0/24中添加一条路由时,网络无法到达的错误。

我在这里错过了什么?

EN

回答 1

Server Fault用户

回答已采纳

发布于 2019-06-26 04:26:30

10.0.47.160超出10.0.0.0/19的范围

来自IP计算器

代码语言:javascript
运行
复制
Address:   10.0.0.0              00001010.00000000.000 00000.00000000
Netmask:   255.255.224.0 = 19    11111111.11111111.111 00000.00000000
Wildcard:  0.0.31.255            00000000.00000000.000 11111.11111111
=>
Network:   10.0.0.0/19           00001010.00000000.000 00000.00000000 (Class A)
Broadcast: 10.0.31.255           00001010.00000000.000 11111.11111111
HostMin:   10.0.0.1              00001010.00000000.000 00000.00000001
HostMax:   10.0.31.254           00001010.00000000.000 11111.11111110
Hosts/Net: 8190                  (Private Internet)

所以10.0.47.160 > 10.0.31.254,网络是无法到达的。

如果您的10.0.0.0/19网络与您的10.0.32.0(/32)路由发生冲突。

我认为您可能是指10.0.32.0到10.0.0.1实际上应该是10.0.32.0/19通过10.0.0.1。

更新

后的

所以你的新路线是:

代码语言:javascript
运行
复制
# ip route list
default via 10.0.0.1 dev eth0 
10.0.0.0/19 dev eth0 proto kernel scope link src 10.0.28.45
10.0.32.0/20 via 10.0.0.1 dev eth0 
169.254.0.0/16 dev eth0 scope link metric 1002 

你还想说:

代码语言:javascript
运行
复制
ip route add 192.168.100.0/24 via 10.0.47.160

您现在可能会遇到的错误是不同的:

代码语言:javascript
运行
复制
Error: Nexthop has invalid gateway.

换句话说,你不能这样做,因为网关不是你的本地的,它是别人的网关。您需要一个与您试图连接的网关位于相同范围的源IP的接口。

您唯一的源IP地址(10.0.28.45)不会在网关的10.0.32.0/20范围内,如果我们允许来自任何地方的数据包,那么我们可能会在网络中出现各种各样的漏洞和循环。

反过来说,它是怎么回来的呢?外部网关将接收一个数据包,并通过它的默认路由将其发送回来,因为主机-A也不会是本地的。

基本上,您要求路由器重新映射源IP,但这在到达第一个网关10.0.0.1之前是不适用的,到那时,它不知道返回的路径,因为数据包没有面包屑跟踪。

有很多方法来解决这个问题,但是它取决于你想要的网络。我会研究隧道(tap和tun)或GRE或虚拟交换机,它们可以重新映射IP和跟踪外部连接,就好像它们是本地的。它们在与目的地相同的范围内创建虚拟接口,这就是VPN的实际工作方式。

谢天谢地,这些解决方案比过去容易得多!

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

https://serverfault.com/questions/972904

复制
相关文章

相似问题

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