You need to enable JavaScript to run this app.
最新活动
大模型
产品
解决方案
定价
生态与合作
支持与服务
开发者
了解我们

WireGuard客户端无法访问互联网及局域网设备问题求助

WireGuard客户端无法访问互联网及局域网设备问题求助

兄弟,我之前帮好几个朋友排查过一模一样的问题!你现在能连到WireGuard服务器的10.100.0.1,说明VPN的基础连接是通的,问题肯定出在IP转发、防火墙规则或者路由配置上,咱们一步步来捋:

第一步:先确认服务器的IP转发是否开启

WireGuard服务器必须允许IP转发,才能把客户端的流量转去外网或者家里的局域网。你先在服务器上执行这条命令看看状态:
sysctl net.ipv4.ip_forward
如果输出显示net.ipv4.ip_forward = 0,说明没开启,先临时开了试试:
sysctl -w net.ipv4.ip_forward=1
要是想让这个设置开机自动生效,就编辑/etc/sysctl.conf文件,把net.ipv4.ip_forward=1这行的注释(#)去掉,保存后执行sysctl -p让配置立刻生效。

第二步:检查服务器的防火墙规则

这是最容易踩坑的地方!大概率是防火墙没放行转发流量,或者没配置NAT(网络地址转换),导致客户端的流量没法通过服务器的公网IP出去。
举个例子,如果你用的是UFW防火墙:

  • 先确保WireGuard的端口(默认是51820/udp)已经被允许:ufw allow 51820/udp
  • 然后添加转发规则,假设服务器连接家里局域网的网卡是eth0(你得换成自己实际的网卡名,用ip link命令能查到):
    ufw route allow in on wg0 out on eth0
  • 最后还要配置NAT规则,编辑/etc/ufw/before.rules文件,在*filter段落之前加上这段内容:
*nat
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -s 10.100.0.0/24 -o eth0 -j MASQUERADE
COMMIT

改完后重启UFW生效:ufw disable && ufw enable

第三步:核对WireGuard的配置文件

你再检查下服务器和客户端的配置有没有漏项:

  • 服务器端的wg0.conf里,有没有配置PostUpPostDown规则?应该要有类似这样的内容,用来自动配置转发和NAT:
PostUp = iptables -A FORWARD -i %i -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
  • 客户端的配置文件里,AllowedIPs是不是设成了0.0.0.0/0, ::/0?如果设的范围太小(比如只写了10.100.0.0/24),那客户端只能访问WireGuard的内网,去不了外网和家里的局域网。另外DNS字段要设成Pi-hole的IP(也就是10.100.0.1或者你家里Pi-hole的局域网IP),不然域名解析不了,自然上不了网。

第四步:排查局域网访问的问题

如果上面的步骤搞定了外网访问,但还是连不上家里的局域网设备,那可能是局域网里的其他设备不知道把回包发给WireGuard服务器。你可以在家庭路由器上加一条静态路由,把10.100.0.0/24这个网段的流量指向WireGuard服务器的局域网IP;或者在WireGuard服务器上配置反向路由,把局域网的网段路由信息推给客户端。

要是还是搞不定,你可以先在客户端ping一下家里某个设备的IP(比如192.168.1.100),然后去服务器上用tcpdump抓包看看流量有没有过来,是不是被防火墙挡住了。

备注:内容来源于stack exchange,提问作者tai

火山引擎 最新活动