我已经爬行了互联网,并尝试了一些配置,但到目前为止,我被困住了,所以如果有人在这方面有比我更好的经验,我将需要一些帮助。 :)
我有一个服务器,server1,位于代理后面。代理服务器拥有1个公共IP和1个内部IP。我希望从 server1 到互联网上的特定主机:端口的连接,通过代理并进行源化。来自 server1 的其他流量(例如更新,直接到达互联网,而不通过代理)。
前任:
- 从 server1 ,尝试到达http://myApidestination.tld:81/myAPI
- 流量被重定向到代理上的端口 8080
- 代理在端口 8080 上接收流量,并转发到端口 81 上的 myApidestination.tld
- 此流量是来源的,因此目标网络服务器将回复代理
我做了什么:
在服务器1上:
iptables -t nat -I OUTPUT -p tcp -d myApidestination.tld --dport 81 -j DNAT --to-destination proxy:8080
在代理上:
iptables -A FORWARD -i INT_IF -o EXT_IF -p tcp --dport 8080 -m conntrack --ctstate NEW -j ACCEPT
iptables -A FORWARD -i INT_IF -o EXT_IF -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -A FORWARD -i EXT_IF -o INT_IF -m conntrack --ctstate ESTABLISHED,RELATED -j ACCEPT
iptables -P FORWARD DROP
iptables -t nat -A PREROUTING -i INT_IF -p tcp --dport 8080 -j DNAT --to-destination myApidestination.tld:81
iptables -t nat -A POSTROUTING -o EXT_IF -p tcp --dport 81 -d myApidestination.tld -j SNAT --to-source proxyPUBLIC_IP
在内核中激活转发并加载模块。
正如预期的那样,来自 server1 的流量将经过代理并到达端口 8080。
但是,流量永远不会通过代理,也永远不会退出这个盒子。看起来规则写得不好,并且 paquet 从未在代理之外传递。
有什么想法吗?
预先非常感谢。
扬恩
答案1
首先 - 你试图以奇怪的方式路由流量。
在具有您的规则的代理上:数据包在预路由中定向到 81 端口,然后在转发链中被阻止。
至少你应该更换
iptables -A FORWARD -i INT_IF -o EXT_IF -p tcp --dport8080-m conntrack --ctstate 新 -j 接受
和
iptables -A FORWARD -i INT_IF -o EXT_IF -p tcp --dport81-m conntrack --ctstate 新 -j 接受
还要检查代理上的路由表。
考虑图表 https://www.frozentux.net/iptables-tutorial/chunkyhtml/images/tables_traverse.jpg