linux透明代理不工作

linux透明代理不工作

我試著讓 apache Trafficserver 在透明代理模式下運作,也就是在內嵌 Linux 橋接模式下運作。他們有文件關於如何做到這一點。我已經按照他們的文檔配置了我的 Linux 系統,這是我的配置:

brctl addbr br0
brctl stp br0 off
brctl addif br0 enp2s0
brctl addif br0 eno1
ifconfig enp2s0 0 0.0.0.0
ifconfig eno1 0 0.0.0.0
ifconfig br0 0.0.0.0
ifconfig br0 192.168.10.100 netmask 255.255.255.0 up
ebtables -t broute -F
ebtables -t broute -A BROUTING -p IPv4 --ip-proto tcp --ip-dport 80 -j redirect --redirect-target DROP
ebtables -t broute -A BROUTING -p IPv4 --ip-proto tcp --ip-sport 80 -j redirect --redirect-target DROP
iptables -t mangle -A PREROUTING -i eno1 -p tcp -m tcp --dport 80 -j TPROXY --on-ip 0.0.0.0 --on-port 8080 --tproxy-mark 1/1
iptables -t mangle -A PREROUTING -i enp2s0 -p tcp -m tcp --sport 80 -j MARK --set-mark 1/1
ip rule add fwmark 1/1 table 1
ip route add local 0.0.0.0/0 dev lo table 1

然而,這個配置似乎不起作用。根據配置,ebtables 和 iptables 規則攔截發送至連接埠 80 的流量並將其重定向到連接埠 8080。

tshark -i eno1 port 80
Running as user "root" and group "root". This could be dangerous.
Capturing on 'eno1'
  1 0.000000000 192.168.20.200 -> 192.168.20.50 TCP 74 58986 > http [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM=1 TSval=345213688 TSecr=0 WS=128
  2 1.002013264 192.168.20.200 -> 192.168.20.50 TCP 74 [TCP Retransmission] 58986 > http [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM=1 TSval=345214690 TSecr=0 WS=128
  3 3.008098848 192.168.20.200 -> 192.168.20.50 TCP 74 [TCP Retransmission] 58986 > http [SYN] Seq=0 Win=29200 Len=0 MSS=1460 SACK_PERM=1 TSval=345216696 TSecr=0 WS=128
3 packets captured

但是,看起來 iptables/ebtables 沒有向上轉發堆疊。我向 iptables 規則添加了跟踪,這就是我在日誌中看到的內容。

[ 5425.095575] TRACE: raw:PREROUTING:policy:2 IN=eno1 OUT= MAC=0c:c4:7a:78:97:c6:0c:c4:7a:b5:be:e9:08:00 SRC=192.168.20.200 DST=192.168.20.50 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=41608 DF PROTO=TCP SPT=58922 DPT=80 SEQ=2153102820 ACK=0 WINDOW=29200 RES=0x00 SYN URGP=0 OPT (020405B40402080A1478234C0000000001030307)
[ 5425.095620] TRACE: mangle:PREROUTING:rule:1 IN=eno1 OUT= MAC=0c:c4:7a:78:97:c6:0c:c4:7a:b5:be:e9:08:00 SRC=192.168.20.200 DST=192.168.20.50 LEN=60 TOS=0x00 PREC=0x00 TTL=64 ID=41608 DF PROTO=TCP SPT=58922 DPT=80 SEQ=2153102820 ACK=0 WINDOW=29200 RES=0x00 SYN URGP=0 OPT (020405B40402080A1478234C0000000001030307)

iptables 追蹤證實了我在 tcpdump 輸出中看到的內容。看起來請求到達 iptables,然後被丟棄在 Linux IP 堆疊的某個地方。不知道在哪裡或如何去調試這個。

在線閱讀有關此主題的內容,有人建議我停用rp_過濾器。然而,關閉 rp_filter 並沒有幫助。其他人建議我啟用 IP 轉發,但這也沒有幫助。任何解決問題的幫助或至少一些關於下一步調試內容或位置的指示將不勝感激。

相關內容