我正在尝试在 Ubuntu 22.04 上使用 Wireguard。相同的服务器客户端配置在 Windows 和 Android 上运行正常,没有任何问题。
我不是服务器端的管理员,但是得到了用户端的以下配置:
[Interface]
Address = 140.22.48.120/24
DNS = 140.22.48.103, 140.22.192.100, 140.22.192.101
PrivateKey = <privatekey
[Peer]
PublicKey = <publickey>
PresharedKey = <presharedkey>
AllowedIPs = 0.0.0.0/0
Endpoint = 140.22.48.100:51820
PersistentKeepalive = 25
使用时sudo wg quick-up wg0
,会生成以下输出:
[#] ip link add wg0 type wireguard
[#] wg setconf wg0 /dev/fd/63
[#] ip -4 address add 140.22.48.120/24 dev wg0
[#] ip link set mtu 1460 up dev wg0
[#] resolvconf -a wg0 -m 0 -x
[#] wg set wg0 fwmark 51820
[#] ip -4 route add 0.0.0.0/0 dev wg0 table 51820
[#] ip -4 rule add not fwmark 51820 table 51820
[#] ip -4 rule add table main suppress_prefixlength 0
[#] sysctl -q net.ipv4.conf.all.src_valid_mark=1
[#] nft -f /dev/fd/63
握手似乎有效。然而,打开任何网页时,连接都会超时。
interface: wg0
public key: <differentpublickey>
private key: (hidden)
listening port: 60246
fwmark: 0xca6c
peer: <publickey>
preshared key: (hidden)
endpoint: 140.22.48.100:51820
allowed ips: 0.0.0.0/0
transfer: 0 B received, 3.32 KiB sent
persistent keepalive: every 25 seconds
第二行的public key
与 第 7 行的 不同<publickey>
。
知道如何让它工作吗?
答案1
Address = 140.22.48.120/24
告诉 wireguard 该接口属于一个网络,该网络覆盖 140.22.48.0-140.22.48.255。这意味着任何发往这些 IP 的数据包都可以通过该接口发送,而无需通过路由器。
但是你的 wireguard 服务器是还在这个网络里面—— 140.22.48.100
。这意味着在 wireguard 启动后,wireguard 会告诉内核可以140.22.48.100
通过 wireguard 接口发送数据包来访问。
这是基本的 TCP/IP 网络。/24
被称为CIDR 表示法。
答案2
哇,这个问题困扰了我近一年之后,我终于找到了解决方案。
而不是Address = 140.22.48.120/24
,灵感来自此评论我已尝试通过将其设置为来传递 32 位Address = 140.22.48.120/32
,并且它可以正常工作。
我不知道为什么会这样,也许有人可以解释一下?