Squid
通過作為 tproxy 執行的 squid 返回數據包不起作用
兩天來我一直在努力讓它正常工作,我迫切需要幫助。我已將 Squid 3 配置為使用 tproxy 標誌在埠 3129 上偵聽的代理,並按照此處找到的shorewall 說明進行操作:
http://www.shorewall.net/Shorewall_Squid_Usage.html#TPROXY
我使用的是 IPv6,所以我已經相應地調整了這些設置,並且通過 NAT 重定向不是一個選項。
當我嘗試在埠 80 上連接到遠端主機(例如 ipv6.google.com)時,連接被 squid Fine 攔截,後者又連接到 ipv6.google.com,但最終連接超時並出現與 squid 錯誤頁面。
如果我執行連接的 tcpdump 這就是我得到的
19:09:11.958367 IP6 2001:388:e000:c100:213:e8ff:fe6b:41e5.56667 > 2404:6800:4006:802::1014.80: Flags [S], seq 4011445546, win 12200, options [mss 1220,sackOK,TS val 3255676 ecr 0,nop,wscale 5], length 0 19:09:12.019139 IP6 2404:6800:4006:802::1014.80 > 2001:388:e000:c100:213:e8ff:fe6b:41e5.56667: Flags [S.], seq 1191029984, ack 4011445547, win 5712, options [mss 1410,sackOK,TS val 967841584 ecr 3255676,nop,wscale 6], length 0
每次請求 TTL 超時時都會重複。
如果我使用 squid 作為非透明代理伺服器,它能夠毫無問題地處理 IPv6 請求。因此,由於某種原因,這些數據包沒有找到返回 squid 的路。
我在跑步:
kernel - 2.6.39 iptables - 1.4.11 shorewall6 - 4.4.20 squid3 - 3.1.12
編輯 - 我看到與 IPv4 相同的行為
ip6tables -nL 輸出:
鏈 INPUT(策略 DROP) 目標 prot opt 源目標 動態所有 ::/0 ::/0 ctstate 無效,新 net2fw 全部 ::/0 ::/0 loc2fw 全部 ::/0 ::/0 接受所有 ::/0 ::/0 刪除所有 ::/0 ::/0 LOG all ::/0 ::/0 LOG flags 0 級別 6 前綴“Shorewall:INPUT:DROP:” 刪除所有 ::/0 ::/0 Chain FORWARD(策略 DROP) 目標 prot opt 源目標 net2loc 全部 ::/0 ::/0 loc2net 全部 ::/0 ::/0 lo_fwd 全部 ::/0 ::/0 拒絕所有 ::/0 ::/0 LOG all ::/0 ::/0 LOG 標誌 0 級別 6 前綴“Shorewall:FORWARD:REJECT:” 拒絕所有 ::/0 ::/0 [轉到] 鏈 OUTPUT(策略 DROP) 目標 prot opt 源目標 fw2net 全部 ::/0 ::/0 fw2loc 全部 ::/0 ::/0 接受所有 ::/0 ::/0 拒絕所有 ::/0 ::/0 LOG all ::/0 ::/0 LOG 標誌 0 級別 6 前綴“Shorewall:OUTPUT:REJECT:” 拒絕所有 ::/0 ::/0 [轉到] 鏈下降(3 參考) 目標 prot opt 源目標 拒絕 tcp ::/0 ::/0 tcp dpt:113 /* Auth */ dropBcast 全部 ::/0 ::/0 dropInvalid all ::/0 ::/0 DROP udp ::/0 ::/0 多埠 dports 135,445 /* SMB */ DROP udp ::/0 ::/0 udp dpts:137:139 /* SMB */ DROP udp ::/0 ::/0 udp spt:137 dpts:1024:65535 /* SMB */ DROP tcp ::/0 ::/0 多埠 dports 135,139,445 /* SMB */ dropNotSyn tcp ::/0 ::/0 DROP udp ::/0 ::/0 udp spt:53 /* 延遲 DNS 回复 */ 連鎖拒絕(2 個參考) 目標 prot opt 源目標 拒絕 tcp ::/0 ::/0 tcp dpt:113 /* Auth */ dropBcast 全部 ::/0 ::/0 dropInvalid all ::/0 ::/0 拒絕 udp ::/0 ::/0 多埠 dports 135,445 /* SMB */ 拒絕 udp ::/0 ::/0 udp dpts:137:139 /* SMB */ 拒絕 udp ::/0 ::/0 udp spt:137 dpts:1024:65535 /* SMB */ 拒絕 tcp ::/0 ::/0 多埠 dports 135,139,445 /* SMB */ dropNotSyn tcp ::/0 ::/0 DROP udp ::/0 ::/0 udp spt:53 /* 延遲 DNS 回复 */ 鏈dropBcast(2個參考) 目標 prot opt 源目標 刪除所有 ::/0 2001:388:e000:c100::/128 刪除所有 ::/0 2001:388:e000:c100:ffff:ffff:ffff:ff80/121 刪除所有 ::/0 ff00::/8 鏈掉落無效(2 個參考) 目標 prot opt 源目標 刪除所有 ::/0 ::/0 ctstate 無效 鏈 dropNotSyn (2 參考) 目標 prot opt 源目標 丟棄 tcp ::/0 ::/0 tcpflags:! 0x17/0x02 鍊式動態(7 篇參考文獻) 目標 prot opt 源目標 鏈 fw2loc (1 參考) 目標 prot opt 源目標 接受所有 ::/0 ::/0 ctstate RELATED,ESTABLISHED 接受所有 ::/0 ::/0 鏈 fw2net (1 參考) 目標 prot opt 源目標 接受所有 ::/0 ::/0 ctstate RELATED,ESTABLISHED 接受 41 ::/0 ::/0 接受所有 ::/0 ::/0 鏈 lo_fwd (1 參考) 目標 prot opt 源目標 sfilter all ::/0 ::/0 [轉到] 動態所有 ::/0 ::/0 ctstate 無效,新 鏈 lo_in (0 引用) 目標 prot opt 源目標 動態所有 ::/0 ::/0 ctstate 無效,新 鏈 loc2fw (1 參考) 目標 prot opt 源目標 動態所有 ::/0 ::/0 ctstate 無效,新 接受所有 ::/0 ::/0 ctstate RELATED,ESTABLISHED 接受所有 ::/0 ::/0 鏈 loc2net (1 參考) 目標 prot opt 源目標 sfilter all ::/0 ::/0 [轉到] 動態所有 ::/0 ::/0 ctstate 無效,新 接受所有 ::/0 ::/0 ctstate RELATED,ESTABLISHED 接受所有 ::/0 ::/0 鏈 logdrop (0 引用) 目標 prot opt 源目標 刪除所有 ::/0 ::/0 鏈日誌標誌(5 個參考) 目標 prot opt 源目標 LOG all ::/0 ::/0 LOG flags 4 級別 6 前綴“Shorewall:logflags:DROP:” 刪除所有 ::/0 ::/0 鏈 logreject (0 引用) 目標 prot opt 源目標 拒絕所有 ::/0 ::/0 鏈 net2fw (1 參考) 目標 prot opt 源目標 動態所有 ::/0 ::/0 ctstate 無效,新 藍精靈所有 ::/0 ::/0 ctstate 無效,新 tcpflags tcp ::/0 ::/0 接受所有 ::/0 ::/0 ctstate RELATED,ESTABLISHED 接受 41 ::/0 ::/0 接受 tcp ::/0 ::/0 tcp dpt:2093 刪除所有 ::/0 ::/0 刪除所有 ::/0 ::/0 鏈 net2loc (1 參考) 目標 prot opt 源目標 sfilter all ::/0 ::/0 [轉到] 動態所有 ::/0 ::/0 ctstate 無效,新 藍精靈所有 ::/0 ::/0 ctstate 無效,新 tcpflags tcp ::/0 ::/0 接受所有 ::/0 ::/0 ctstate RELATED,ESTABLISHED 接受 tcp ::/0 2001:388:e000:c100:216:3eff:fe24:dce6/128 多埠 dports 25,993 刪除所有 ::/0 ::/0 刪除所有 ::/0 ::/0 連鎖拒絕(9 參考) 目標 prot opt 源目標 刪除所有 ::/0 2001:388:e000:c100::/128 刪除所有 ::/0 2001:388:e000:c100:ffff:ffff:ffff:ff80/121 刪除所有 ff00::/8 ::/0 刪除 2 ::/0 ::/0 REJECT tcp ::/0 ::/0 用 tcp-reset 拒絕 拒絕 udp ::/0 ::/0 拒絕 icmp6-port-unreachable REJECT icmpv6 ::/0 ::/0 拒絕-與 icmp6-addr-unreachable 拒絕所有 ::/0 ::/0 拒絕使用 icmp6-adm-prohibited 鍊式過濾器(3 個參考) 目標 prot opt 源目標 LOG all ::/0 ::/0 LOG flags 0 級別 6 前綴“Shorewall:sfilter:DROP:” 刪除所有 ::/0 ::/0 鍊式岸牆(0 篇參考文獻) 目標 prot opt 源目標 鏈藍精靈 (3 參考) 目標 prot opt 源目標 LOG all ::/0 ::/0 LOG 標誌 0 級別 6 前綴“Shorewall:smurfs:DROP:” 刪除所有 ::/0 ::/0 鏈藍精靈 (2 參考) 目標 prot opt 源目標 smurflog all 2001:388:e000:c100::/128 ::/0 [轉到] smurflog 所有 2001:388:e000:c100:ffff:ffff:ffff:ff80/121 ::/0 [轉到] smurflog 所有 ff00::/8 ::/0 [轉到] 鏈 tcpflags(2 個參考) 目標 prot opt 源目標 logflags tcp ::/0 ::/0 [轉到] tcpflags: 0x3F/0x29 logflags tcp ::/0 ::/0 [轉到] tcpflags: 0x3F/0x00 logflags tcp ::/0 ::/0 [轉到] tcpflags: 0x06/0x06 logflags tcp ::/0 ::/0 [轉到] tcpflags: 0x03/0x03 logflags tcp ::/0 ::/0 [轉到] tcp spt:0flags: 0x17/0x02
ip6tables -t mangle -nL 輸出:
鏈 INPUT(策略 DROP) 目標 prot opt 源目標 動態所有 ::/0 ::/0 ctstate 無效,新 net2fw 全部 ::/0 ::/0 loc2fw 全部 ::/0 ::/0 接受所有 ::/0 ::/0 刪除所有 ::/0 ::/0 LOG all ::/0 ::/0 LOG flags 0 級別 6 前綴“Shorewall:INPUT:DROP:” 刪除所有 ::/0 ::/0 Chain FORWARD(策略 DROP) 目標 prot opt 源目標 net2loc 全部 ::/0 ::/0 loc2net 全部 ::/0 ::/0 lo_fwd 全部 ::/0 ::/0 拒絕所有 ::/0 ::/0 LOG all ::/0 ::/0 LOG 標誌 0 級別 6 前綴“Shorewall:FORWARD:REJECT:” 拒絕所有 ::/0 ::/0 [轉到] 鏈 OUTPUT(策略 DROP) 目標 prot opt 源目標 fw2net 全部 ::/0 ::/0 fw2loc 全部 ::/0 ::/0 接受所有 ::/0 ::/0 拒絕所有 ::/0 ::/0 LOG all ::/0 ::/0 LOG 標誌 0 級別 6 前綴“Shorewall:OUTPUT:REJECT:” 拒絕所有 ::/0 ::/0 [轉到] 鏈下降(3 參考) 目標 prot opt 源目標 拒絕 tcp ::/0 ::/0 tcp dpt:113 /* Auth */ dropBcast 全部 ::/0 ::/0 dropInvalid all ::/0 ::/0 DROP udp ::/0 ::/0 多埠 dports 135,445 /* SMB */ DROP udp ::/0 ::/0 udp dpts:137:139 /* SMB */ DROP udp ::/0 ::/0 udp spt:137 dpts:1024:65535 /* SMB */ DROP tcp ::/0 ::/0 多埠 dports 135,139,445 /* SMB */ dropNotSyn tcp ::/0 ::/0 DROP udp ::/0 ::/0 udp spt:53 /* 延遲 DNS 回复 */ 連鎖拒絕(2 個參考) 目標 prot opt 源目標 拒絕 tcp ::/0 ::/0 tcp dpt:113 /* Auth */ dropBcast 全部 ::/0 ::/0 dropInvalid all ::/0 ::/0 拒絕 udp ::/0 ::/0 多埠 dports 135,445 /* SMB */ 拒絕 udp ::/0 ::/0 udp dpts:137:139 /* SMB */ 拒絕 udp ::/0 ::/0 udp spt:137 dpts:1024:65535 /* SMB */ 拒絕 tcp ::/0 ::/0 多埠 dports 135,139,445 /* SMB */ dropNotSyn tcp ::/0 ::/0 DROP udp ::/0 ::/0 udp spt:53 /* 延遲 DNS 回复 */ 鏈dropBcast(2個參考) 目標 prot opt 源目標 刪除所有 ::/0 2001:388:e000:c100::/128 刪除所有 ::/0 2001:388:e000:c100:ffff:ffff:ffff:ff80/121 刪除所有 ::/0 ff00::/8 鏈掉落無效(2 個參考) 目標 prot opt 源目標 刪除所有 ::/0 ::/0 ctstate 無效 鏈 dropNotSyn (2 參考) 目標 prot opt 源目標 丟棄 tcp ::/0 ::/0 tcpflags:! 0x17/0x02 鍊式動態(7 篇參考文獻) 目標 prot opt 源目標 鏈 fw2loc (1 參考) 目標 prot opt 源目標 接受所有 ::/0 ::/0 ctstate RELATED,ESTABLISHED 接受所有 ::/0 ::/0 鏈 fw2net (1 參考) 目標 prot opt 源目標 接受所有 ::/0 ::/0 ctstate RELATED,ESTABLISHED 接受 41 ::/0 ::/0 接受所有 ::/0 ::/0 鏈 lo_fwd (1 參考) 目標 prot opt 源目標 sfilter all ::/0 ::/0 [轉到] 動態所有 ::/0 ::/0 ctstate 無效,新 鏈 lo_in (0 引用) 目標 prot opt 源目標 動態所有 ::/0 ::/0 ctstate 無效,新 鏈 loc2fw (1 參考) 目標 prot opt 源目標 動態所有 ::/0 ::/0 ctstate 無效,新 接受所有 ::/0 ::/0 ctstate RELATED,ESTABLISHED 接受所有 ::/0 ::/0 鏈 loc2net (1 參考) 目標 prot opt 源目標 sfilter all ::/0 ::/0 [轉到] 動態所有 ::/0 ::/0 ctstate 無效,新 接受所有 ::/0 ::/0 ctstate RELATED,ESTABLISHED 接受所有 ::/0 ::/0 鏈 logdrop (0 引用) 目標 prot opt 源目標 刪除所有 ::/0 ::/0 鏈日誌標誌(5 個參考) 目標 prot opt 源目標 LOG all ::/0 ::/0 LOG flags 4 級別 6 前綴“Shorewall:logflags:DROP:” 刪除所有 ::/0 ::/0 鏈 logreject (0 引用) 目標 prot opt 源目標 拒絕所有 ::/0 ::/0 鏈 net2fw (1 參考) 目標 prot opt 源目標 動態所有 ::/0 ::/0 ctstate 無效,新 藍精靈所有 ::/0 ::/0 ctstate 無效,新 tcpflags tcp ::/0 ::/0 接受所有 ::/0 ::/0 ctstate RELATED,ESTABLISHED 接受 41 ::/0 ::/0 接受 tcp ::/0 ::/0 tcp dpt:2093 刪除所有 ::/0 ::/0 刪除所有 ::/0 ::/0 鏈 net2loc (1 參考) 目標 prot opt 源目標 sfilter all ::/0 ::/0 [轉到] 動態所有 ::/0 ::/0 ctstate 無效,新 藍精靈所有 ::/0 ::/0 ctstate 無效,新 tcpflags tcp ::/0 ::/0 接受所有 ::/0 ::/0 ctstate RELATED,ESTABLISHED 接受 tcp ::/0 2001:388:e000:c100:216:3eff:fe24:dce6/128 多埠 dports 25,993 刪除所有 ::/0 ::/0 刪除所有 ::/0 ::/0 連鎖拒絕(9 參考) 目標 prot opt 源目標 刪除所有 ::/0 2001:388:e000:c100::/128 刪除所有 ::/0 2001:388:e000:c100:ffff:ffff:ffff:ff80/121 刪除所有 ff00::/8 ::/0 刪除 2 ::/0 ::/0 REJECT tcp ::/0 ::/0 用 tcp-reset 拒絕 拒絕 udp ::/0 ::/0 拒絕 icmp6-port-unreachable REJECT icmpv6 ::/0 ::/0 拒絕-與 icmp6-addr-unreachable 拒絕所有 ::/0 ::/0 拒絕使用 icmp6-adm-prohibited 鍊式過濾器(3 個參考) 目標 prot opt 源目標 LOG all ::/0 ::/0 LOG flags 0 級別 6 前綴“Shorewall:sfilter:DROP:” 刪除所有 ::/0 ::/0 鍊式岸牆(0 篇參考文獻) 目標 prot opt 源目標 鏈藍精靈 (3 參考) 目標 prot opt 源目標 LOG all ::/0 ::/0 LOG 標誌 0 級別 6 前綴“Shorewall:smurfs:DROP:” 刪除所有 ::/0 ::/0 鏈藍精靈 (2 參考) 目標 prot opt 源目標 smurflog all 2001:388:e000:c100::/128 ::/0 [轉到] smurflog 所有 2001:388:e000:c100:ffff:ffff:ffff:ff80/121 ::/0 [轉到] smurflog 所有 ff00::/8 ::/0 [轉到] 鏈 tcpflags(2 個參考) 目標 prot opt 源目標 logflags tcp ::/0 ::/0 [轉到] tcpflags: 0x3F/0x29 logflags tcp ::/0 ::/0 [轉到] tcpflags: 0x3F/0x00 logflags tcp ::/0 ::/0 [轉到] tcpflags: 0x06/0x06 logflags tcp ::/0 ::/0 [轉到] tcpflags: 0x03/0x03 logflags tcp ::/0 ::/0 [轉到] tcp spt:0flags: 0x17/0x02
我發現了問題,缺少兩條規則,我認為應該插入shorewall,執行以下命令可以解決問題。
ip6tables -t mangle -N DIVERT ip6tables -t mangle -A DIVERT -j MARK --set-mark 1 ip6tables -t mangle -A DIVERT -j ACCEPT ip6tables -t mangle -I tcpre 1 -p tcp -m socket -j DIVERT