RouterOS 文档展示了如何通过 RouterOS 内置的 HTTP 代理透明地代理所有 Web 流量:
/ip firewall nat
add in-interface=ether1 dst-port=80 protocol=tcp action=redirect to-ports=8080 chain=dstnat
/ip proxy
set enabled=yes port=8080
我想在另一台机器上运行代理,这样我就可以利用 Squid 或类似程序中提供的更复杂的过滤规则。但是,如果我使用 NAT 将流量重定向到另一台运行 Squid 的机器,这将行不通,因为 HTTP 请求需要重写才能成为代理 HTTP 请求;仅仅重定向流量会导致 Squid 出现错误请求。
答案1
无需在 RouterOS 中设置代理。您可以通过 NAT 将所有传出的 HTTP 流量直接路由到服务器:
ip firewall nat add in-interface=eth1 src-address=!<IP of Squid machine> dst-port=80 protocol=tcp action=dst-nat to-addresses=<IP of Squid machine> to-ports=8080
如果 squid 机器通过与其他机器相同的接口进行通信,则需要最后一个参数“src-address=!...”。否则它会像这样:
- 计算机发送 HTTP 请求
- RouterOS 将此数据包发送到 squid
- Squid 向 Web 服务器发送 HTTP 请求
- RouterOS 再次将 squid 请求转发给 squid -> 循环
答案2
可以通过以下parent-proxy
设置完成:
/ip proxy
set parent-proxy=<IP of Squid machine> parent-proxy-port=3128
答案3
/ip proxy
set parent-proxy=<IP of Squid machine> parent-proxy-port=3128
/ip firewall nat
chain=dstnat src-address=!<IP of Squid machine> protocol=tcp dst-port=80 src-address-list=<IP of Local machine> action=redirect to-ports=8080