![通过 OpenVPN / tun0 路由来自一个接口(默认网关)的所有流量 - 基于策略的路由,取决于源地址/接口](https://linux22.com/image/213649/%E9%80%9A%E8%BF%87%20OpenVPN%20%2F%20tun0%20%E8%B7%AF%E7%94%B1%E6%9D%A5%E8%87%AA%E4%B8%80%E4%B8%AA%E6%8E%A5%E5%8F%A3%EF%BC%88%E9%BB%98%E8%AE%A4%E7%BD%91%E5%85%B3%EF%BC%89%E7%9A%84%E6%89%80%E6%9C%89%E6%B5%81%E9%87%8F%20-%20%E5%9F%BA%E4%BA%8E%E7%AD%96%E7%95%A5%E7%9A%84%E8%B7%AF%E7%94%B1%EF%BC%8C%E5%8F%96%E5%86%B3%E4%BA%8E%E6%BA%90%E5%9C%B0%E5%9D%80%2F%E6%8E%A5%E5%8F%A3.png)
我有一个带有 2 个接口的 Debian Linux VPN 路由器myvpnserver
,eno1
并且eno2
:
eno1
连接到 LAN 和互联网路由器。在这个具有静态 IP 地址的接口上,myvpnserver
有其默认网关(到 Internet)。 OpenVPN 使用此互联网连接连接到 VPN 服务器。eno2
连接到一个开关。 DHCP 服务器在此接口上运行。我希望来自连接的客户端的所有流量都eno2
通过 VPN / tun0 路由。
基本设置工作正常。从连接到的主机,eno2
我可以访问远程 VPN LAN 中的主机(例如10.123.0.0/24
)。
我的下一个目标是myvpnserver
根据源地址或接口进行路由。
如果myvpnserver
连接到互联网(例如ftp.debian.org
或 VPN 主机),则应使用默认网关eno1
。如果连接到的客户端eno2
想要连接到相同的 Internet 主机(例如ftp.debian.org
),则流量应通过 VPN /tun0
而不是myvpnserver
的默认网关进行路由。
// For Incoming Traffic:
If( InputInterface = eno2 ) Then
default_gateway = 172.17.100.1
Else
default_gateway = gateway as declared in /etc/network/interfaces
End If
我发现基于策略的路由似乎是要走的路。虽然“正常”路由仅基于目的地,但据说基于策略的路由能够考虑其他方面,例如输入接口或源 IP 范围。
应采取哪些步骤? (我使用的是 Debian 11 / Bullseye。)
1.) 我添加了一行1000 vpntunnel
到/etc/iproute2/rt_tables
.
下一步是什么?你能给我一个配置示例吗?
非常感谢您的任何建议!
答案1
接下来要采取的步骤可能就像添加一项策略规则和一项路由表条目一样简单。
你可以试试:
ip route add default via 172.17.100.1 table 1000
ip rule add type unicast iif eno2 table 1000 pref 30000
我假设 172.17.100.1 是您 VPN 隧道的另一端。我在表中使用了数值 1000,但由于您添加了名为“vpntunnel”的条目,因此您可以使用该名称。
您的 VPN 可能已经有一些配置设置,这些设置可能与我的建议相冲突。 “ ip rule show
”和“ ”的输出ip route show table all
可能对这个问题有用。此外,现有的 iptables 配置也可能需要更改建议的解决方案。