Iptables

使用 iptables 將系統範圍的流量重定向到本地代理伺服器

  • June 7, 2020

我的範例中使用的程式碼取自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 值可供高級路由使用。(透明代理工作所必需的:否則這些數據包將被轉發,這可能不是您想要的。)

參考 :

代理文件

網路過濾器人

引用自:https://serverfault.com/questions/1020374