我正在尝试对我的一台服务器(为避免混淆,从现在起称为“客户端”)进行 DDOS 保护。为此,我从 OVH 租用了一台廉价服务器(称为“服务器”),并尝试将所有流量从服务器路由到客户端,以便它通过 DDOS 保护。
我决定使用 Wireguard 作为最佳解决方案,并成功链接了两台服务器。我现在正在尝试将端口从客户端转发到服务器,并尝试了此设置(其中10.20.40.2
是客户端,10.20.40.1
是服务器):
sudo iptables -t nat -A PREROUTING -p tcp --dport $port -j DNAT --to-destination 10.20.40.2
sudo iptables -A FORWARD -o wg0 -p tcp --syn --dport $port -m conntrack --ctstate NEW -j ACCEPT
sudo iptables -A FORWARD -o wg0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -A FORWARD -o eth0 -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
sudo iptables -t nat -A PREROUTING -p tcp --dport $port -j DNAT --to-destination 10.20.40.2
sudo iptables -t nat -A POSTROUTING -o wg0 -p tcp --dport $port -d 10.20.40.2 -j SNAT --to-source 10.20.40.1
这很好,只是从客户端的角度来看,每个 IP 都10.20.40.1
属于服务器。有没有办法将公共 IP 地址转发给客户端?我以前在 StackExchange 上看到过这个问题,但限制是“客户端”在他们的情况下无法访问。我对两台服务器都有完全访问权限,因此在任意一台服务器上安装软件都不是问题。
客户端的 Wireguard 配置:
[Interface]
PrivateKey = (redacted)
ListenPort = 51820
Address = 10.20.40.2/16
[Peer]
PublicKey = (redacted)
Endpoint = (redacted):51820
AllowedIPs = 10.20.40.0/16
服务器的 Wireguard 配置:
[Interface]
PrivateKey = (redacted)
ListenPort = 51820
Address = 10.20.40.1/24
[Peer]
PublicKey = (redacted)
AllowedIPs = 10.20.40.0/24
答案1
在 POSTROUTING 中交换 IP 地址:
sudo iptables -t nat -A POSTROUTING -o wg0 -p tcp --dport $port -d 10.20.40.1 -j SNAT --to-source 10.20.40.2
在客户端 wireguard 配置中允许 IP:
AllowedIPs = 0.0.0.0/0
因为数据包现在将具有原始源地址。
答案2
是的,不使用该 SNAT 规则其作用实际上就是替换原始的 IP 地址。
您可能添加了该 SNAT 规则来诱骗目标服务器通过 WG 隧道接口发送响应。这可以通过其他方式更好地完成,例如策略路由:
在您的服务器上,创建一个新的路由表,其中默认路由指向“wg0”,没有其他任何内容:
ip -4 route add default dev wg0 table 1234
在同一台服务器上,添加策略路由规则,每当即将发送响应时,将源 IP 地址 10.20.40.2 与新路由表关联:
ip -4 rule add pref 1000 from 10.20.40.2 lookup 1234
答案3
我最终使用了这个 WireGuard 配置来解决我的问题:
PostUp = iptables -A FORWARD -i wg0 -j ACCEPT; iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
PostDown = iptables -D FORWARD -i wg0 -j ACCEPT; iptables -t nat -D POSTROUTING -o eth0 -j MASQUERADE
以及这个端口转发命令:
iptables -t nat -A PREROUTING -p tcp -i eth0 --dport [PORT] -j DNAT --to-destination 10.20.40.2