首页 > 解决方案 > Wireguard 无法解析 Docker 上的本地 DNS

问题描述

我有一个运行多个容器的 docker,包括 dnsmasq 和 wireguard 服务器。

码头工人组成:

version: "2.1"
services:
  wireguard:
    image: ghcr.io/linuxserver/wireguard
    container_name: wireguard
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    environment:
      - PUID=1002
      - PGID=1002
      - TZ=Europe/Paris
    volumes:
      - ./config:/config
      - /lib/modules:/lib/modules
    ports:
      - 51820:51820/udp
    sysctls:
      - net.ipv4.conf.all.src_valid_mark=1
      - net.ipv4.ip_forward=1
    restart: unless-stopped

服务器配置:

[Interface]
PrivateKey = XXXXXXXX
ListenPort=51820
Address = 10.0.0.1/24
PostUp   = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -A FORWARD -o %i -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE  
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -D FORWARD -o %i -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE

客户端配置:

[Interface]
PrivateKey = XXXXX
Address = 10.0.0.16/24

[Peer]
PublicKey = XXXX
AllowedIPs = 192.168.0.0/24
Endpoint = XXXXX
PersistentKeepalive = 25

与wireguard的连接正常,握手成功,我可以ping本地网络上的机器并访问互联网。

有些服务只能在本地网络(192.168.0.0/24)上访问,所以我尝试在客户端配置中添加 DNS(dnsmasq 托管在同一 docker 主机上)行:

[Interface]
PrivateKey = XXXXX
Address = 10.0.0.16/24
DNS = 192.168.0.13

[Peer]
PublicKey = XXXX
AllowedIPs = 192.168.0.0/24
Endpoint = XXXXX
PersistentKeepalive = 25

添加 dns 行时,没有解决任何问题。我仍然可以 ping 所有机器,但无法访问本地域或互联网。

我能做些什么来解决这个问题?

谢谢 !

标签: dockerdnsmasqwireguard

解决方案


好吧,目前我们设法通过在 docker compose 的端口部分指定主机来解决这个问题。

ports:
      - 192.168.0.11:51820:51820/udp

我们为 dnsmasq 和 wireguard 添加了这个,似乎更好,但任何其他解决方案将不胜感激!


推荐阅读