Iptables
使用 iptables 將系統範圍的流量重定向到本地代理伺服器
我的範例中使用的程式碼取自
REDSOCKS
教程,但它不適合我。我正在嘗試通過本地代理伺服器重定向我的所有 tcp 流量。#!/bin/bash CHAIN="MYCHAIN" PROTO="tcp" iptables -t nat -N ${CHAIN} # Ignore LANs and some other reserved addresses. iptables -t nat -A ${CHAIN} -d 0.0.0.0/8 -j RETURN iptables -t nat -A ${CHAIN} -d 10.0.0.0/8 -j RETURN iptables -t nat -A ${CHAIN} -d 127.0.0.0/8 -j RETURN iptables -t nat -A ${CHAIN} -d 169.254.0.0/16 -j RETURN iptables -t nat -A ${CHAIN} -d 172.16.0.0/12 -j RETURN iptables -t nat -A ${CHAIN} -d 192.168.0.0/16 -j RETURN iptables -t nat -A ${CHAIN} -d 224.0.0.0/4 -j RETURN iptables -t nat -A ${CHAIN} -d 240.0.0.0/4 -j RETURN # Anything else should be redirected to port 12345 iptables -t nat -A ${CHAIN} -p ${PROTO} -j REDIRECT --to-ports 12345 iptables -A INPUT -p ${PROTO} -j ${CHAIN}
執行腳本時收到此錯誤:
iptables v1.8.4 (legacy): Couldn't load target 'MYCHAIN':No such file or directory
.我想我錯過了一條規則,但我不知道是哪一條。
你必須先創建
MYCHAIN
,暗示:
嘗試TPROXY目標(在PREROUTING / mangle中 )。
(僅在 mangle 表、PREROUTING 鍊和僅從此鏈呼叫的使用者定義鏈中有效)。
他們有一個很好的例子:
iptables -t mangle -A PREROUTING -p tcp --dport 80 -j TPROXY --tproxy-mark 0x1/0x1 --on-port 50080
從手冊:
它將數據包重定向到本地套接字,而不以任何方式更改數據包標頭。它還可以更改標記值,然後可以在高級路由規則中使用。它需要三個選項:
--on-port port
這指定要使用的目標埠。必選,0 表示新的目的埠與原來的相同。這僅在規則還指定 -p tcp 或 -p udp 時才有效。
--on-ip address
這指定要使用的目標地址。預設情況下,地址是傳入介面的 IP 地址。這僅在規則還指定 -p tcp 或 -p udp 時才有效。
--tproxy-mark value[/mask]
用給定的值/遮罩標記數據包。此處設置的 fwmark 值可供高級路由使用。(透明代理工作所必需的:否則這些數據包將被轉發,這可能不是您想要的。)
參考 :