我有一台必须重建的 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
运行的替代脚本。使用包使规则永久生效。iptables
iptables-persistent
为了更好地理解,iptables
你可以阅读iptables 教程。