我在构建跨越两个不同子网和vpn连接的静态路由时遇到了问题。我的拓扑如下:
inet 10.0.28.45
网络掩码255.255.224.0
广播10.0.31.255
inet 10.0.47.160
网络掩码255.255.240.0
广播10.0.47.255
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上的路由表如下所示:
# 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,如下所示:
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上的路由表如下:
$ 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中添加一条路由时,网络无法到达的错误。
我在这里错过了什么?
发布于 2019-06-26 04:26:30
10.0.47.160超出10.0.0.0/19的范围
来自IP计算器:
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。
更新
所以你的新路线是:
# 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
你还想说:
ip route add 192.168.100.0/24 via 10.0.47.160
您现在可能会遇到的错误是不同的:
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的实际工作方式。
谢天谢地,这些解决方案比过去容易得多!
https://serverfault.com/questions/972904
复制相似问题