如何使用 iptables 重写流经 wireguard vpn 的 DNS 查询?

如何使用 iptables 重写流经 wireguard vpn 的 DNS 查询?

我有一台必须重建的 wireguard VPN 服务器。旧服务器有一个在虚拟接口上运行的内部 DNS 服务器。172.16.0.1我实际上不需要/不想在此上运行 DNS,有没有办法使用 iptables 拦截 DNS 查询172.16.0.1并将其发送到1.1.1.1

ifconfig:

wg0: flags=209<UP,POINTOPOINT,RUNNING,NOARP>  mtu 1420
        inet 10.19.49.1  netmask 255.255.255.0  destination 10.19.49.1

eth0: flags=4163<UP,BROADCAST,RUNNING,MULTICAST>  mtu 1500
        inet xxx.xxx.xxx.xxx  netmask 255.255.240.0  broadcast xxx.xxx.xxx.xxx

以下是 wireguard 中的 postup/down 规则:

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

答案1

是的,这很简单:

iptables -t nat -A PREROUTING -p tcp --dst 172.16.0.1 --dport 53 -j DNAT --to-destination 1.1.1.1:53
iptables -t nat -A PREROUTING -p udp --dst 172.16.0.1 --dport 53 -j DNAT --to-destination 1.1.1.1:53

iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

iptables -A FORWARD -m conntrack --ctstate ESTABLISHED,RELATED,DNAT -j ACCEPT

最好使用直接多次iptables-save/iptables-restore/iptables-apply运行的替代脚本。使用包使规则永久生效。iptablesiptables-persistent

为了更好地理解,iptables你可以阅读iptables 教程

相关内容