我想设置一个 VPN 服务器,以便仅在访问服务器内的资源时使用 VPN 连接。通常,我会使用服务器的内部IP来执行此操作,但我想使用域名来访问该服务器。
有几种方法可以实现这一目标:
使用自定义 DNS 服务器
将另一个IP绑定到该服务器
设置为与“客户端”中
Endpoint
的相同AllowedIPs
(我知道wg不使用服务器-客户端架构,但这样对我来说更容易理解)。例如:# client [Interface] PrivateKey = ... Address = 10.0.0.2/24 [Peer] PublicKey = ... AllowedIPs = 1.2.3.4/32 Endpoint = 1.2.3.4:51820
长话短说,选项 3 最适合我的用例,但它会导致路由表中出现循环。经过一些研究(wireguard 页面中的“改进的基于规则的路由”部分和此解决方案),我了解到FwMark
在“服务器”配置中使用可以解决该问题。
所以我想出了这个:
# server
[Interface]
PrivateKey = ...
ListenPort = 51820
Address = 10.0.0.1/24
FwMark = 51820
PostUp = ip route add default dev wg0 table 2468
PostUp = ip rule add not fwmark 51820 table 2468
PostDown = ip route del default dev wg0 table 2468
PostDown = ip rule del not fwmark 51820 table 2468
[Peer]
...
不用说,这不起作用(VPN 和直接通信都会超时,所以我猜我搞乱了路由规则)我的问题是:
- 为什么这不起作用?
FwMark = 51820
“服务器”配置中的设置是否标记 VPN 路由数据包?或者我需要类似的东西吗PostUp = wg set wg0 fwmark 51820
?- 如果我替换
2468
为default
,main
, 甚至 ,会发生什么local
?我想我不明白为什么官方文档必须为此设置一个新表。
谢谢
编辑:修复端口的拼写错误