我已经尝试了几种不同的规则组合,似乎没有任何工作。 我知道你不能使用prerouting表来处理来自localhost的请求,所以我使用了输出表,并且在使用wget的时候只是返回错误。
我有wgetconfiguration使用代理127.0.0.1:8118。 当我使用下面的命令我得到我的公共IP。 如果我更改命令以删除–no-proxy,则从我的代理获取IP。
我想通过代理使用iptables来强制对这个站点发出任何请求,而不pipe请求它的程序如何。 我本质上是试图创build一个透明的代理,但只为一个网站的请求。
系统= Debian挤压
wget命令:
wget --no-proxy -q -O - checkip.dyndns.org|sed -e 's/.*Current IP Address: //' -e 's/<.*$//'
我在/etc/sysctl.conf中启用了net.ipv4.ip_forwarding = 1。
试图规则:
iptables -t nat -I OUTPUT --source 0/0 --destination checkip.dyndns.org -p tcp -j REDIRECT --to-ports 8118 iptables -t nat -I OUTPUT -p tcp -d checkip.dyndns.org -j REDIRECT --to-ports 8118 iptables -t nat -I PREROUTING -p tcp -s localhost -j DNAT --to 127.0.0.1:8118 iptables -t nat -I OUTPUT --source localhost --destination checkip.dyndns.org -p tcp -j REDIRECT --to-ports 8118
和其他各种类似的。
你实际上提到了这个(透明代理)的正确的术语。 首先,你需要一个支持透明代理的代理服务器。 其次,您需要使用iptables将HTTP请求redirect到它,如下所示:
iptables -A OUTPUT -d checkip.dyndns.org -p tcp --dport 80 -j DNAT --to-destination 127.0.0.1:8118
使用这样的规则告诉您的机器将端口80上的所有传出http请求redirect到端口8118上的本地代理。另外,编写依赖于DNS名称的规则并不是一个好主意,尤其是当DNS名称到IP映射发生更改时。 iptables只会将名称转换为IP,并使用该IP而不是名称。