如何把 iptables 当代理用

2023-09-21 10:11:29 +08:00
 LitterGopher
有 A,B,C 三台机器,AB 、BC 互通,AC 不通,A IP 不确定,BC IP 确定,。现在希望通过 B 来实现让 A 访问 C 的 1234 UDP 端口。如果使用 IP tables 应该如何配置?

(不使用 nginx )
991 次点击
所在节点    问与答
8 条回复
sujin190
2023-09-21 10:16:51 +08:00
LitterGopher
2023-09-21 10:20:39 +08:00
@sujin190 是端口转发,但问题在于这些教程如果解决了我的问题我还需要用这种第效率的方法么(前两页的所有内容都看过了)?
tool2d
2023-09-21 10:34:18 +08:00
听起来不难,就是在 B 上设置条件。

1. 判断所有从 A 发起的 UDP 包,通过 iptables 修改 DNAT ,目标地址为 C
2. 判断所有从 C 返回的 UDP 包,通过 iptables 修改 SNAT ,目标地址为 A

只是从理论上可行,具体有什么大坑就不清楚了。
sujin190
2023-09-21 10:55:37 +08:00
@LitterGopher #2 第一条说的就是没问题的

iptables -t nat -A PREROUTING -p udp --dport 1234 -j DNAT --to-destination C 的 IP
iptables -t nat -A POSTROUTING -s A 的 IP -p udp --dport 1234 -j SNAT --to-source B 的 IP

就是这样啊,但是需要调整 A 的路由表在 A 访问 C 是下一跳是 B

脾气不要这么差
sujin190
2023-09-21 10:56:29 +08:00
A 的 IP 不确定,第二条可以不写就是了

iptables -t nat -A POSTROUTING -p udp --dport 1234 -j SNAT --to-source B 的 IP
gulugu
2023-09-21 11:00:46 +08:00
sudo iptables -t nat -A PREROUTING -i eth0 -p udp -d A_IP --dport 1234 -j DNAT --to-destination C_IP:1234
sudo iptables -A FORWARD -i eth0 -o eth0 -p udp -d C_IP --dport 1234 -j ACCEPT
vi /etc/sysctl.conf
net.ipv4.ip_forward=1
sudo sysctl -p
LitterGopher
2023-09-21 11:15:09 +08:00
@sujin190 确实没注意情绪,十分抱歉。
bowser1701
2023-09-22 09:06:28 +08:00
如果 A B 不是二层互通的做不到,如果是二层互通的直接 A 加路由 通过 B ,在 B 上加 MASQUERADE 就可以了。

如果只需要访问到 C ,那可以在 A 上直接访问 B 的某个端口,B 转发到 C 的目的端口。前提是可以在 A 上把 C 改成 B 的地址。

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

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

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

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

© 2021 V2EX