Ubuntu20.04服务器部署LinuxServer官方WireGuard Docker容器后客户端无法访问部分网站的问题咨询
我之前在部署LinuxServer的WireGuard Docker镜像时也碰到过类似的客户端访问部分网站被拒的情况,结合官方镜像的默认配置逻辑,大概率是这几个常见原因导致的,给你梳理下排查方向和解决办法:
DNS解析异常:默认配置里的DNS可能和某些网站的解析规则不兼容,或者容器的DNS设置没有正确同步给客户端。你可以试试修改WireGuard客户端的配置文件,把
DNS行替换成公共DNS,比如DNS = 8.8.8.8或者DNS = 1.1.1.1,然后重启客户端连接再测试。网段冲突导致路由异常:WireGuard默认使用的虚拟网段(一般是10.13.13.0/24)如果和客户端所在的局域网网段重叠,会导致部分网站的路由跳转出错,进而触发访问被拒。你可以修改Docker启动命令里的
SERVER_SUBNET参数,换成一个和客户端局域网不冲突的网段,比如SERVER_SUBNET=10.14.14.0/24,重启容器后重新生成客户端配置文件再测试。服务器防火墙/IP转发未正确配置:Ubuntu主机的防火墙或者IP转发规则可能拦截了WireGuard的流量。首先检查IP转发是否开启:执行
sysctl net.ipv4.ip_forward,如果返回0,就执行sysctl net.ipv4.ip_forward=1临时开启,再把net.ipv4.ip_forward=1添加到/etc/sysctl.conf里永久生效。然后检查ufw状态,确保允许UDP 51820端口(WireGuard默认端口):ufw allow 51820/udp。如果还是有问题,可以手动添加iptables转发规则(把下面的eth0换成你的服务器外网网卡名,用ip addr可以查看):
iptables -A FORWARD -i wg0 -j ACCEPT iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
MTU设置过大引发数据包分片问题:部分网站对数据包大小限制严格,WireGuard默认的MTU可能导致数据包分片被拦截。你可以在客户端的WireGuard配置文件里添加一行
MTU = 1420,这个值是比较通用的,能避免大部分分片问题,重启客户端后再测试访问。网站IP封禁:如果上面的方法都没用,你可以在服务器上直接用
curl命令测试那个无法访问的网站,如果服务器能正常访问但客户端不行,那还是路由或DNS的问题;如果服务器也访问不了,那大概率是网站封禁了你的服务器IP,这种情况可能需要更换服务器IP或者尝试其他绕过方式。
备注:内容来源于stack exchange,提问作者Miguel Duque




