You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Docker容器通过主机WireGuard VPN接口路由后短时间内失去连接的问题排查求助

Docker容器通过主机WireGuard VPN接口路由后短时间内失去连接的问题排查求助

大家好,我最近在尝试让特定Docker容器通过主机上的WireGuard VPN接口对外联网,但遇到了一个奇怪的问题,想请各位帮忙分析一下。

先说说我的环境配置:

Docker Compose配置(自定义bridge网络)

version: '3.7'

services:
  ubuntu:
    image: ubuntu
    restart: unless-stopped
    tty: true
    networks:
      wireguard:
        ipv4_address: 172.18.0.2

networks:
  wireguard:
    driver: bridge
    driver_opts:
      com.docker.network.bridge.name: 'wireguard'
    ipam:
      driver: default
      config:
        - subnet: 172.18.0.0/16

WireGuard客户端配置(wg0.conf)

[Interface]
Table = off
SaveConfig = false
PrivateKey = {Client Private Key}
Address = 10.8.0.21/32
DNS = 10.8.0.1

# 手动创建仅针对WG相关通信的路由
PostUp = iptables -t mangle -I PREROUTING 1 -i wg0 -m conntrack --ctstate NEW -j CONNMARK --set-mark 2
PostUp = iptables -t mangle -I OUTPUT 1 -m connmark --mark 2 -j CONNMARK --restore-mark
PostUp = iptables -t mangle -I PREROUTING 2 -m connmark --mark 2 -j CONNMARK --restore-mark
PostUp = ip rule add fwmark 2 lookup 2
PostUp = ip rule add table main suppress_prefixlength 0
PostUp = ip route add default dev wg0 table 2
PostUp = sysctl -q net.ipv4.conf.all.src_valid_mark=1
PostUp = sysctl -w net.ipv4.conf.wg0.rp_filter=2

# 关闭wg0时清理规则
PostDown = iptables -t mangle -D PREROUTING -i wg0 -m conntrack --ctstate NEW -j CONNMARK --set-mark 2
PostDown = iptables -t mangle -D OUTPUT -m connmark --mark 2 -j CONNMARK --restore-mark
PostDown = iptables -t mangle -D PREROUTING -m connmark --mark 2 -j CONNMARK --restore-mark
PostDown = ip rule del table main suppress_prefixlength 0
PostDown = ip rule flush table 2

[Peer]
PublicKey = {VPN Server Public Key}
AllowedIPs = 10.8.0.1/32,0.0.0.0/0
Endpoint = {VPN Server Connection Endpoint}
PersistentKeepalive = 25

我的目标是让这个自定义Docker网络里的容器全部通过WireGuard VPN对外发起连接,所以在主机shell里执行了以下两条路由规则:

ip rule add from 172.18.0.0/16 lookup 2
ip route add 172.18.0.0/16 dev wg0 table 2

一开始一切正常:进入容器后ping外部地址、查IP都显示是VPN服务器的出口IP,网络完全没问题。但奇怪的是,大概30秒到5分钟之后,容器就完全无法对外联网了,所有请求都超时。

我用tcpdump抓桥接网络的包,发现容器一直在发送ARP请求,试图查找172.18.0.1的MAC地址,但根本得不到回应。

我之前在论坛和社区看到很多人用类似的方法实现Docker容器走指定VPN接口,都成功了,实在搞不清楚自己哪里操作错了,有没有大佬能帮忙排查一下这个问题?

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

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.04.20 09:29:52