请教 iptables 为某些 ip 段单独做 跳板 的配置办法

2018-02-22 01:37:01 +08:00
 yongw520
看了半天文章,实在搞不懂。。。遂来求教

需求:
A 为跳板 111.111.111.111
B 为目标主机 222.222.222.222

A 作为日常使用代理,但不能访问某网站。
而 B 流量少,链路差,但可以访问某网站。
需求是 A 作代理访问某网站的 IP 段时(已知),转发至 B.

查到如下全部转发的办法,尝试了下可以正常工作。
iptables -t nat -A PREROUTING -p tcp --dport A 的端口 -j DNAT --to-destination B 的 IP:B 的端口
iptables -t nat -A POSTROUTING -p tcp -d B 的 IP --dport B 的端口 -j SNAT --to-source A 的 IP
iptables -t nat -A PREROUTING -p udp --dport A 的端口 -j DNAT --to-destination B 的 IP:B 的端口
iptables -t nat -A POSTROUTING -p udp -d B 的 IP --dport B 的端口 -j SNAT --to-source A 的 IP
4547 次点击
所在节点    Linux
7 条回复
defunct9
2018-02-22 04:31:18 +08:00
如上的例子用 nginx 来做岂不是更好一些
Geoion
2018-02-22 05:11:47 +08:00
没看太懂,但是好像 qtunnel 能满足需求
msg7086
2018-02-22 06:50:24 +08:00
前几天刚刚做过类似的配置。
我们的场景是,A 要访问某个主机 C,但是由于某些原因 C 把 A 的流量 block 了,于是需要用 B 中转。

B 机
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source B 机 IP
iptables -A FORWARD -i eth0 -o eth0 -s A 机 IP -j ACCEPT
iptables -A FORWARD -i eth0 -o eth0 -m state --state ESTABLISHED,RELATED -j ACCEPT

A 机
ip r add C 机 IP/32 dev eth0 via B 机 IP

当然我们是内网环境,所以没有加额外的保护,你用的话应该要加上 IP 限定。
但是反正就是 SNAT 的事情。
mingl0280
2018-02-22 10:37:35 +08:00
你这个需求在本地做 PAC 代理规则比较好……因为是 HTTP/HTTPS,iptables 起来比较烦,因为有各种 CDN 啊什么的
如果非要搞的话
-t nat -A PREROUTING -d [final_target_addr] -p tcp --dport [final-target-port] -j DNAT --to-destination [B-addr]:[B-port] #去程的包转发到跳板机
-t nat -A POSTROUTING -s [source_addr] -o [income_netdevice] -j MASQUERADE #返回的包让他自动搞去
scegg
2018-02-22 10:58:21 +08:00
直接加个 route 不就好了。。。
debian 语法:
route add -net 1.2.3.0/24 gw gateway.ip.address
yongw520
2018-02-22 21:10:37 +08:00
感谢提供帮助的各位, 最终使用 shadowsocks-libev-redir 并配合 iptables 与 ipset 再做了层代理.
参考了该思路: https://medium.com/@terrancesiu/rixcloud%E6%9C%80%E4%BD%B3%E5%AE%9E%E8%B7%B5-cf9d828f82fd
Abby11
2018-04-06 09:46:56 +08:00
@yongw520 请问你有碰到这个问题么?如何解决?
# whois -h riswhois.ripe.net -- '-i origin AS14618' | grep "route: " | awk '{print $NF}' | sort | /usr/local/sbin/listclean.sh >>/root/as14618.txt
-bash: /usr/local/sbin/listclean.sh: Permission denied

我用了 chmod 777 还是不行

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

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

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

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

© 2021 V2EX