如何使用使用 iptables 将特定流量通过局域网内某代理服务器

2020-06-03 17:46:16 +08:00
 8023

拓扑:服务器 -- 路由器 -- 客户机、服务器

服务器为外网服务器(无管理权),路由器运行 RouterOS (有管理权),客户机为物联网终端(无管理权),服务器运行 Ubuntu Server,装了 mitmproxy 等一系列服务(有管理权)。现要实现对物联网终端的 HTTPS 流量(自签发证书)进行监听并记录。


尝试 1:服务器上运行 mitmproxy 代理模式,在 RouterOS 中使用 Mangle 标记符合特征的链接,再用 dst-nat 将符合特征的链接重定向至 mitmproxy 的监听端口( 8080 )。

测试失败;流量并没有「流经」代理,而是直接访问了代理(效果如客户端直接访问 mitmproxy:8080 )。日志「 HTTP protocol error in client request: Invalid HTTP request form (expected: authority or absolute, got: relative)」


尝试 2:服务器上运行 mitmproxy 透明代理模式,在 RouterOS 中使用 Mangle 标记符合特征的链接,再用 dst-nat 将符合特征的链接重定向至 mitmproxy 的监听端口( 8080 )。

测试失败;流量并没有「流经」代理,而是直接访问了代理(效果如客户端直接访问 mitmproxy:8080 )。日志为循环递归访问自身,最终导致内存溢出崩溃。


尝试 3:服务器上运行 mitmproxy 代理模式,在 RouterOS 中使用 Mangle 标记符合特征的链接,再用 redirect 将符合特征的链接重定向至 RouterOS Web Proxy (自带功能),再将 RouterOS Web Proxy 的上级代理设置为 mitmproxy 的代理地址。

测试失败;因 Web Proxy 只可以代理 http 流量,但我需要监听 https 流量。况且 RouterOS 的 Web Proxy 功能性能不佳。


尝试 4:服务器上运行 mitmproxy 透明代理模式,将『『另一台』』客户机网关设置为装有 mitmproxy 的服务器地址,mitmproxy 服务器的下一条为路由器。

测试失败;流量成功监听记录,但我手中的这台机器没有管理权。况且在服务器上部署透明模式的 mitmproxy 会影响其它业务。


问题 1:mitmproxy 透明模式需要在服务器上执行 iptables 命令「 iptables -t nat -A PREROUTING -i eth0 -p tcp --dport 443 -j REDIRECT --to-port 8080 」,即将目标端口为 443 的流量重定向为 8080 监听端口。而我在路由器上使用 dst-nat (redirect 只能重定向到本机其它端口)将目标端口为 443 的流量重定向到服务器的 8080 端口,则会出现异常,为什么?

问题 2:为实现目标效果,在尽可能减少工作量的情况下,我应该怎么做?


提前表示感谢。

2098 次点击
所在节点    路由器
2 条回复
wnpllrzodiac
2020-06-03 17:48:40 +08:00
一看就是干的不好的事情啊
linvon
2020-06-03 19:10:52 +08:00
你开代理本来不就是应该直接访问代理服务器吗
你想要做监听没必要改掉原来的请求啊,路由器把下一跳换到你的服务器上,服务器收到请求解包分析监听再将请求内容回给客户端不就完成代理了吗

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

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

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

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

© 2021 V2EX