wireguard+iptables 怎么实现把一个端口流量保持来源 IP 全部转发到另一个服务器上?

2023-01-19 21:41:53 +08:00
 edis0n0
一台服务器经常被 DDoS 攻击,前置加了一台高防服务器(原服务器只能换 IP ,没办法直接上高防,程序已经十几年没人维护了不敢迁移),用 Nginx 反代,但这样 IP 全变成反代服务器 IP 了,试了改请求头 XFF 之类的方法全部无效,说明程序没有适配,不要再提这样的建议了。现在在尝试用 wireguard+iptables 来转发流量,但我非科班没学过一点网络(属于自家路由器都不会配,宽带师傅装完路由器后台都不敢进,怕我碰一下网就炸了的那种),看了一下午文档还没解决,求个 iptables 规则。
2774 次点击
所在节点    Linux
14 条回复
iseki
2023-01-19 22:07:26 +08:00
为什么要用 wireguard 呢,仅供参考,自己测试好再上,默认不做 masquerade 就不会动源 IP:
iptables -L PREROUTING -t nat -p tcp --dport -j DNAT --to-destination 10.0.0.1:1234
echo 1 > /proc/sys/net/ipv4/ip_forward
iseki
2023-01-19 22:07:48 +08:00
-L -> -I (手滑了
edis0n0
2023-01-19 22:07:48 +08:00
试过在反代服务器配 iptables -t nat -A PREROUTING -p tcp -d 10.0.0.20 --dport 80 -j DNAT --to-destination 10.0.0.1:80
然后反代服务器直接失联了,重启才恢复
iseki
2023-01-19 22:09:16 +08:00
@edis0n0 🤣我端口转发一直这么干,没出啥问题,不知道你那边咋了
iseki
2023-01-19 22:10:23 +08:00
不对啊,你这样改完,你不动源 IP ,数据回不去了嘛
edis0n0
2023-01-19 22:10:27 +08:00
@iseki #1 如果公网直接这样转发也不会动来源 IP 会不会导致来源 IP 可以随意伪造?
iseki
2023-01-19 22:11:23 +08:00
@edis0n0 来源 IP 本来就可以随便伪造,而且你不动源 IP 应该是不行的,数据回不去了啊
SAGAN
2023-01-19 22:12:51 +08:00
理论上应该可以做到吧。需要用到 wireguard 隧道,否则回程的流量源服务器会直接发送给客户端,然后被客户端丢弃。

假设反代(eth0: 1.2.3.4, wg0: 10.0.0.1/24) <--> 源(eth0: 2.3.4.5, wg0: 10.0.0.2/24)。服务运行在 tcp/80 端口。

首先两台服务器都需要打开 ipv4 forward (net.ipv4.ip_forward=1)

反代:
iptables -t mangle -A PREROUTING -p tcp --dport 80 -m mark --set-mark 0x1/0x1 -j ACCEPT
iptables -t nat -A PREROUTING -m mark --mark 0x1/0x1 -j DNAT --to 2.3.4.5
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
ip rule add fwmark 0x1/0x1 table 10
ip route add default via 10.0.0.1 table 10

源:
iptables -t mangle -A PREROUTING -j CONNMARK --restore-mark
iptables -t mangle -A PREROUTING -p tcp --dport 80 -m mark --set-mark 0x1/0x1 -j ACCEPT
iptables -t mangle -A POSTROUTING -j CONNMARK --save-mark
ip rule add fwmark 0x1/0x1 table 10
ip route add default via 10.0.0.2 table 10
edis0n0
2023-01-19 22:13:24 +08:00
@iseki #5 可能是别的规则导致的失联,下午瞎折腾加了十几条 iptables 规则,又试了下#1 这个规则,tcpdump 没抓到任何的包,不知道为什么没转发过去
iseki
2023-01-19 22:13:58 +08:00
唔,原来是为了这个才上 wireguard 啊
terrytw
2023-01-19 22:14:53 +08:00
DNAT 和 SNAT 要配套使用吧
瞄了一眼 openwrt LUCI 里加的规则,SNAT+DNAT
bugfan
2023-01-19 22:33:46 +08:00
defunct9
2023-01-20 14:27:42 +08:00
开 ssh ,让我上去看看
pagxir
2023-01-20 16:08:00 +08:00
建议使用 ipsec 传输模式,这样 app 层就可以正常看到 IP 头,并且不影响路由

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/909961

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX