我的本地机器中有两种代理:stunnel和TOR-VPN。
我想让网络流量首先进入stunnel,stunnel的输出流量转到tor-vpn。这需要双重重定向。是否有可能用iptables做到这一点?我的意思是使用"表nat链OUTPUT"。
因为据我所知"表nat链OUTPUT"不能被叫两次。
网络流量=浏览器收听127.0.0.1:6666
这些是我的规则:
iptables -t nat -A OUTPUT -p tcp -j REDIRECT --to-ports 6666
iptables -t nat -A OUTPUT -p tcp -m owner --uid-owner bob -m tcp -j REDIRECT --to-ports 9040
iptables -t nat -A OUTPUT -p udp -m owner --uid-owner bob -m udp --dport 53 -j REDIRECT --to-ports 53
iptables -t filter -A OUTPUT -p tcp --dport 6666 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp -m owner --uid-owner bob -m tcp --dport 9040 -j ACCEPT
iptables -t filter -A OUTPUT -p udp -m owner --uid-owner bob -m udp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -m owner --uid-owner bob -j DROP
上述规则使得stunnel独立于TOR / VPN工作。 我的意思是当浏览器设置了代理时,没有流量通过TOR / VPN,但如果我在浏览器中关闭代理,所有流量都将通过TOR / VPN。
现在我想让浏览器启用代理并且所有网络流量首先进入stunnel,但是传出的stunnel流量(传出环回流量)重定向到TOR / VPN(127.0.0.1:9040)
有可能吗?我怎样才能做到这一点?不知何故,我的意思是在系统内部双重重定向。
所有表的政策都是ACCEPT
答案 0 :(得分:0)
检查这是你的意思:
你有stunnel绑定到端口6666(localhost:6666)并且你绑定到9040(localhost:9040)。你想要它,所以你的网络流量将通过stunnel(所以目的地是localhost:6666)但OUTBOUND流量FROM stunnel(最初来自你的客户端的入站流量重定向到stunnel)应该是DESTINED到tor(localhost:9040)?这是对的吗?
如果是这样,我正在思考清楚(这只是7点,而且我已经醒了太多时间来度过一个艰难的夜晚),这确实是可能的(反过来也是如此)。您需要根据源(地址和端口(您不必指定两者)来伪装目标地址(实际上是端口),我可能会添加)。像这样:
iptables -t nat -I PREROUTING -p tcp --sport 6666 -j DNAT --to-destination 9040
如果这不是你的意思(或者我做了一个错字,我不清楚头脑或在某种程度上是一个白痴(在所有情况下表明自己是一个用户,因为每个人都是!),如果它可能是后者)那么请回复。我会看到启用电子邮件通知,以便我看到响应。但是,如果我不这样做,我会事先道歉。
顺便说一句:除非你在每个CHAIN中都有最终规则(不是表格,就像fyi:表格是过滤器,nat(我在上面指定的,确实是必要的),等等,CHAIN是INPUT,OUTPUT,FORWARD和其他由选项-N)创建的你不应该有-P ACCEPT('未明确允许的是禁止的'和类似的措辞 - 即有DROP)。例外情况可能是OUTPUT(但最终取决于您的需求)。但是,在处理界面问题时,可以使用' lo'在任何情况下,您都希望始终接受所有流量(即指定-i lo和-o lo,具体取决于链,并跳转到ACCEPT)。当然,也许你会在另一台设备后面,但仍然是最好的做法,不接受任何事情! (我还应该声明每个表有不同的链,所以是的,你可以指定不同的表,但是策略是针对该表中的链)
编辑:别的东西:不,当你想要DNAT时,你不必处理SNAT,反之亦然。任何相反的事情都是一种误解。原因是你伪装了CONNECTION。手册页显示:
它指定了目标地址 应修改数据包(此连接中的所有未来数据包也将被修复),并且应停止检查规则。
编辑: 如果我理解你(现在)你实际上有两个接口。或者更具体地说,您需要以下内容:
您有想要加密的服务。这是tor。现在,您正在使用stunnel来执行此操作。为此,您希望stunnel将流量转发给tor。这是正确的吗?如果是,那么知道stunnel有以下指令(我实际上使用类似的其他东西)。这是一个服务的模拟设置。
[tor]
accept = 6666
connect = 9040
另外,正如笔记:连接也可以是远程地址(远程地址意味着外部地址(带端口)甚至是系统上的某个接口(通过IP和端口)(我使用外部地址)你指定ip和端口而不仅仅是一个端口。)此外,accept可以指定地址(使用相同的规则:在端口之前的ip(除了显然在本地机器上,所以没有外部IP)。你可以解释它可能是因为stunnel是服务绑定的地方,除了服务是stunnel并且它正在加密的服务在别处(很快:bind(2)调用允许系统上的特定IP或所有IP,并且你&#39 ;基本上配置stunnel来做这件事。)
(是的,你是对的:这项运动应该是dport。)
如果这不是您所需要的,那么我不理解所有变量。在这种情况下,如果您可以详细说明涉及哪些接口(包括端口和每个接口的服务)以及涉及的客户端(以及它们发送的位置)。因为如果其他人完全知道你需要什么而不是推断某些部分会更有帮助。如果您完全知道问题是什么,那么解决问题会更容易。也许我已经密集了,我应该将它们全部放在一起(我承认睡眠问题 - 我已经很长很长一段时间 - 没有帮助,但......)我没有,我认为
答案 1 :(得分:-1)
我自己找到了答案。在我的第一篇文章中,我说了一些完全错误的东西,因此,我不能做双重重定向。 我说:
因为据我所知"表nat链OUTPUT"不能被叫两次
这是错误的"表nat链OUTPUT"可以被叫两次。我不知道2个月前我做了什么,以及#at; table nat chain OUTPUT"不能被叫两次。
这是在回送接口上使用某些服务时的表和链顺序:
环回时没有任何服务:
本地计算机上生成的数据包 - > nat(OUTPUT) - >过滤器(OUTPUT) - > wlan(以太网)接口
在环回上提供一些服务:
本地计算机上生成的数据包 - > nat(OUTPUT) - >过滤器(OUTPUT) - > loopback接口 - > nat(OUTPUT) - >过滤器(OUTPUT) - > wlan(以太网)接口
这些是我解决问题的规则:
iptables -t nat -A OUTPUT -p tcp -m tcp --dport 6666 -j REDIRECT --to-ports 6666
iptables -t nat -A OUTPUT -p tcp -m owner --uid-owner bob -m tcp -j REDIRECT --to-ports 9040
iptables -t nat -A OUTPUT -p udp -m owner --uid-owner bob -m udp --dport 53 -j REDIRECT --to-ports 53
iptables -t nat -A OUTPUT -d "StunnelServerIp" -o wlan0 -p tcp -j REDIRECT --to-ports 9040
iptables -t filter -A OUTPUT -p tcp -m owner --uid-owner bob -m tcp --dport 9040 -j ACCEPT
iptables -t filter -A OUTPUT -p udp -m owner --uid-owner bob -m udp --dport 53 -j ACCEPT
iptables -t filter -A OUTPUT -p tcp -m tcp --dport 6666 -j ACCEPT
iptables -t filter -A OUTPUT -m owner --uid-owner bob -j DROP