在 wireguard 中配置 DNS 路由

在 wireguard 中配置 DNS 路由

有人可以帮忙在 wireguard 中配置路由吗?

我拥有的:安装了 wireguard、未绑定的 dns、pihole、seafile 的 Linux 服务器。路由器 keenetic speedster iptables 设置为拒绝所有 80 端口,只允许 wireguard 本地用户使用。对于服务,我在 pi-hole 中创建了指向 10.0.0.1(wireguard 网络上服务器的地址)的本地域名

我现在能做什么:我可以使用 wg 接口连接到 wireguard 网络,如果所有流量都经过 wireguard,我就可以访问像 fakedomain.com 这样的虚假域名来访问 seafile 或其他资源。

我需要的:我想分割流量,以便我可以通过 vpn 访问本地 wireguard 网络中的资源,并通过提供商的网络访问所有其他资源。

我的配置:

工作组服务器

[Interface]
Address = 10.0.0.1/24
ListenPort = 56777
PrivateKey = privateKey
MTU = 1450
PostUp = iptables -t mangle -A POSTROUTING -p tcp --tcp-flags SYN,RST SYN -o ens3 -j TCPMSS --clamp-mss-to-pmtu; iptables -t nat -A POSTROUTING -o ens3 -j MASQUERADE; iptables -A FORWARD -i %i -j ACCEPT; sysctl -q -w net.ipv4.ip_forward=1
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o ens3 -j MASQUERADE; iptables -t mangle -D POSTROUTING -p tcp --tcp-flags SYN,RST SYN -o ens3 -j TCPMSS --clamp-mss-to-pmtu; sysctl -q -w net.ipv4.ip_forward=0

[Peer]
PublicKey = publikKey
PresharedKey = presharedKey
AllowedIPs = 10.0.0.6/32

WG-客户:

[Interface]
Address = 10.0.0.6/32
PrivateKey = privateKey
DNS = 10.0.0.1
[Peer]
PublicKey = publicKey
PresharedKey = presharedKey
AllowedIPs = 0.0.0.0/0
Endpoint = 188.119.112.63:56777
PersistentKeepalive = 25

Iptables:

-P INPUT ACCEPT
-P FORWARD ACCEPT
-P OUTPUT ACCEPT
-N f2b-sshd
-A INPUT -p tcp -m multiport --dports 22 -j f2b-sshd
-A INPUT -s 10.0.0.0/24 -p tcp -m tcp --dport 53 -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -s 10.0.0.0/24 -p udp -m udp --dport 53 -m conntrack --ctstate NEW -j ACCEPT
-A INPUT -s 10.0.0.0/24 -p tcp -m tcp --dport 80 -j ACCEPT
-A INPUT -s 10.0.0.0/24 -p tcp -m tcp --dport 5000 -j ACCEPT
-A INPUT -s 10.0.0.0/24 -p tcp -m tcp --dport 443 -j ACCEPT
-A INPUT -p tcp -m tcp --dport 5000 -j DROP
-A INPUT -p tcp -m tcp --dport 80 -j DROP
-A INPUT -p tcp -m tcp --dport 443 -j DROP
-A FORWARD -i wg0 -j ACCEPT

为了进行测试,我创建了一条到 dnsleaktest.com 23.239.16.110 的路由,并指定了 wireguard 子网,结果在测试期间,我的服务器的 ip 显示一切正常,当我转到另一个站点检查 ip 时,提供商提供的动态地址显示为 178.140.42.115

当我写一条到我自己的服务器的路由时,通过内部 ip - 10.0.0.1 - 我可以在这个地址连接到它,我可以访问资源,但只能通过本地 ip 和端口。通过我在 pi-hole 本地 DNS 上给出的名称 - 我无法进入。所以我需要配置 dns 路由,但我不知道如何使其正确。

我尝试更改 wireguard 配置并指定以下设置:

PostUp = iptables -t nat -A PREROUTING -i ens3 -p udp -m udp --dport 53 -j DNAT --to-destination 10.0.0.1:53
PostUp = iptables -t nat -A PREROUTING -i ens3 -p tcp -m tcp --dport 53 -j DNAT --to-destination 10.0.0.1:53
PostDown = iptables -t nat -D PREROUTING -i ens3 -p udp -m udp --dport 53 -j DNAT --to-destination 10.0.0.1:53
PostDown = iptables -t nat -D PREROUTING -i ens3 -p tcp -m tcp --dport 53 -j DNAT --to-destination 10.0.0.1:53

在这种情况下,一切都开始正常工作,但是,由于某种原因,2-3 分钟后,我再次收到 DNS 无法解析的错误,在我将其关闭并再次打开后,在 wireguard 路由器上,一切都恢复正常 2 - 3 分钟,然后关闭。

路由器配置:

主要的

航线

答案1

在 Wireguard 客户端设置中,你可以指定使用 PostUP 通过的 DNS 服务器的域:

[Interface]
Address = 10.0.0.1/24
PrivateKey = somePrivateKey
PostUp = resolvectl dns %i 10.0.0.1 10.0.0.2; resolvectl domain %i ~fakedomain.com

[Peer]
PublicKey = somePubliceKey
AllowedIPs = 0.0.0.0/0
Endpoint = 1.2.3.4:60000

答案2

我已通过在 Wireguard 界面部分添加“DNS = [DNS 服务器 IP]”在我的 Wireguard 配置中添加了远程 DNS 服务器。

IE:

[Interface]
PrivateKey = xxxxxxxxxxx/xxxxxxxxxxx=
Address = 192.168.10.20/32
DNS = 192.168.10.130

答案3

我找到了一个解决方案,它很愚蠢,在主连接上注册与 wireguard 接口上相同的 dns 10.0.0.1 就足够了

答案4

就我而言,在“[Interface]”组中添加此行有效:

PostUp = resolvectl dns $(ip route show default| cut -d" " -f 5|head -n1) 1.1.1.1 8.8.8.8 1.0.0.1; resolvectl domain $(ip route show default| cut -d" " -f 5|head -n1) ~.;

相关内容