![通过隧道为第二个 VLAN 路由默认网关(linux/tinc)](https://linux22.com/image/629442/%E9%80%9A%E8%BF%87%E9%9A%A7%E9%81%93%E4%B8%BA%E7%AC%AC%E4%BA%8C%E4%B8%AA%20VLAN%20%E8%B7%AF%E7%94%B1%E9%BB%98%E8%AE%A4%E7%BD%91%E5%85%B3%EF%BC%88linux%2Ftinc%EF%BC%89.png)
已修复:结果是 BatchyX 所说的问题(远程端缺少 172.16.101.0/24 路由)和远程端的 tinc 无法运行 -up 脚本(该脚本不可执行)的组合。
现在一切都很顺利,感谢大家的帮助:)
=============================================================================
我的问题出奇地难以解释,所以我会把它分解成几个小部分,提前为冗长的文字表示歉意:)
我在托管服务提供商处有一台服务器,它有一个公共 IP,该服务器正在运行 tinc(vpn 软件)。
在家里我有两个 VLAN,VLAN1(我的 PC 等的普通子网,位于 NAT 后面),和 VLAN20,用于我的 vmware 实验室环境。
我想要设置的是,我的 VLAN20 网络可以使用托管提供商的服务器作为其网关(其外部 IP),而不是我家里的外部网关。
为此,我在家里有一个服务器,它有两个网络接口,一个网卡在 VLAN1 上,一个网卡在 VLAN20 上。
假设我有以下 IP:
Server at hosting provider:
Public IP: 123.123.123.123 (eth0)
Private IP: 10.1.0.1/24 (tun0)
Network at home:
VLAN1 - 192.168.1.0/24 (.1 is the gateway)
VLAN20 - 172.16.101.0/24
Network on server at home:
NIC1 (VLAN1) - 192.168.1.50/24 (eth0)
NIC2 (VLAN20) - 172.16.101.1/24 (eth1)
Tunnel - 10.1.0.2/24 (tun0)
我已经设置了 tinc,这样我家里的服务器就可以通过隧道工作,我可以从家里的服务器 ping 10.1.0.1,从托管服务提供商的服务器 ping 10.1.0.2。
除此之外,我已经进行了设置,以便家里的服务器使用隧道作为默认网关,这一切都是从家里的实际服务器进行的,我的问题是我无法让 VLAN20 网络上的客户端访问互联网。
所以我遇到的问题是我无法弄清楚如何设置路由,以便 172.16.101.0/24 网络使用隧道上的默认网关。
家里的服务器上的路线如下:
root@home:/etc/tinc/vpn/hosts# ip route
0.0.0.0/1 dev tun0 scope link
default via 192.168.1.1 dev eth0
10.1.0.0/24 dev tun0 proto kernel scope link src 10.1.0.2
123.123.132.123 via 192.168.1.1 dev eth0
128.0.0.0/1 dev tun0 scope link
172.16.101.0/24 dev eth1 proto kernel scope link src 172.16.101.1
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.50
当隧道启动时,会添加/1:
ip route add 0.0.0.0/1 dev $INTERFACE
ip route add 128.0.0.0/1 dev $INTERFACE
从家里的服务器到 8.8.8.8 进行跟踪路由:
root@home:/etc/tinc/vpn/hosts# traceroute -s 10.1.0.2 8.8.8.8 -n
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
1 10.1.0.1 33.681 ms 33.698 ms 33.658 ms
2 Router_At_Hosting_Provider 34.930 ms 34.907 ms 34.875 ms
因此“隧道”子网(10.1.0.0)可以与隧道上的默认网关一起正常工作。
这也很好用:
root@home:/etc/tinc/vpn/hosts# traceroute -s 172.16.101.1 10.1.0.2 -n
traceroute to 10.1.0.2 (10.1.0.2), 30 hops max, 60 byte packets
1 10.1.0.2 0.032 ms 0.003 ms 0.005 ms
但我的问题是这样的:
root@home:/etc/tinc/vpn/hosts# traceroute -s 172.16.101.1 8.8.8.8 -n
traceroute to 8.8.8.8 (8.8.8.8), 30 hops max, 60 byte packets
1 * * *
2 * * *
3 * * *
如果有人能指出我应该去哪里寻找,我将不胜感激。
(在安装完 Debian 后,对两个服务器所做的更改的完整列表在此处http://pastebin.com/r3Vsvycq)
编辑我对 Visio 很不擅长,但这里我尝试展示我正在尝试设置的内容: https://i.stack.imgur.com/ff2R6.png(由于我的声誉不够高,因此还不能内联)。
答案1
这个配置有几个 WTF:
ip route add 0.0.0.0/1 dev $INTERFACE
ip route add 128.0.0.0/1 dev $INTERFACE
自行将其替换为ip route change default dev $INTERFACE
。这将删除 eth1 上的默认网关并将其替换为您自己的网关。您可能还想通过src 10.1.0.2
在末尾添加 来设置该路由上的首选源地址。
如果您想保留默认路由,但要在其上添加自己的路由,则只需将原始默认路由的度量更改为 1 或更大。添加默认路由时,它将覆盖(但不会破坏)原始默认路由。
此外,VPN 启动时到 10.1.0.0/24 的路由有点冗余,因为它已经被默认路由覆盖。
你想要的路由表看起来更像这样:
default dev tun0 scope link src 10.1.0.2
default via 192.168.1.1 dev eth0 metric 1
123.123.132.123 via 192.168.1.1 dev eth0
172.16.101.0/24 dev eth1 proto kernel scope link src 172.16.101.1
192.168.1.0/24 dev eth0 proto kernel scope link src 192.168.1.50
现在这个路由表是正确的。现在唯一的问题是您的服务器没有到 172.16.101.0/24 的路由,因此将尝试通过其公共接口进行路由。返回路径基本上已损坏,因此 traceroute 有效,但 ping 无效。
只需在远程站点通过 tun0 添加一条到 172.16.101.0/24 的路由就可以了。