RPi - Squid 代理:分配 Squid 端口以使用特定网络接口进行传出流量

问题描述 投票:0回答:1

亲爱的各位好先生和女士们,

感谢您成为这个令人惊叹的社区,您在其中竭尽全力提供帮助!我从你那里学到了很多东西 - 但我无法设置一个鱿鱼转发代理(经典的),其中两个网络接口插入我的 RPi,每个接口仅在使用特定端口时代理流量。经过几周的阅读和尝试后,我现在已经投降并正在寻求帮助。

我想要实现的目标

我想从我的笔记本电脑访问连接到我的 RPi 的多个以太网设备的互联网连接。理想情况下,我想使用(我的 RPi 的)多个端口,并且每个特定端口鱿鱼应该将请求代理到指定的网络接口。如果我连接到代理“RPi:3128”,它会通过 eth1 代理请求,如果我连接到代理“RPi:3129”,它会通过 eth2 代理请求。

我正在做什么

我正在使用 Raspbian GNU/Linux 10 (buster) 和 Squid 版本 4.6 开发 Raspberry Pi 3B+(“squid -v”就是这么说的)。

我的网络适配器是两个 SIM 适配器:

  1. Eth1 192.168.0.100 华为E3372h(hilink版本)
  2. Eth2 192.168.0.101 中兴MF667

我的问题是什么

现在,当我尝试从我的网络(从我的笔记本电脑)连接到端口 3128 上的 RPi 时,代理工作正常。我获取了 eth1(192.168.0.100 以太网设备)的公共 IP 地址(IPv4 和 IPv6)。但是:当我尝试通过 3129 连接时,我得到的是 eth1(192.168.0.100 以太网设备)的 IP 地址,而不是 eth2(192.168.0.101)的 IP 地址。所以我无法访问eth2。

我检查了什么

对 IP 的 Curl 请求对它们两个都有效,对我的 RPi 没有任何麻烦,并且我得到了两个不同的 IP 地址。通过 ifconfig,我为他们提供了本地 IP 地址。

Netstat -plant 表示鱿鱼正在监听。

我尝试过哪些失败的事情

我尝试了这个:Squid - 监听多个端口并转发到不同的代理,但这似乎不是完全正确的方向。

尝试为端口分配一个明确的tcp_outgoing_address(完整的squid.conf在最后): http_端口 3129 acl port_name 本地端口 3129 tcp_outgoing_address 192.168.0.101 端口名称 #tcp_outgoing_address fe62::d11e:6206:e32:f82b port_name(ipv6 已更改 - 我从 ifconfig 输出和 eth2 复制了它) 但它似乎不起作用,我无法连接到 eth2。

说实话,我对 RPi/Squid/代理相当陌生,因此我非常感谢您的帮助。预先感谢!

Squid.conf 和 netstat -plant

我的squid.conf看起来像这样,(稍微改编)来自:https://github.com/serverok/squid-proxy-installer/blob/master/squid.conf

http_port 3128
cache deny all
hierarchy_stoplist cgi-bin ?
    
access_log none
cache_store_log none
cache_log /dev/null
    
refresh_pattern ^ftp: 1440 20% 10080
refresh_pattern ^gopher: 1440 0% 1440
refresh_pattern -i (/cgi-bin/|\?) 0 0% 0
refresh_pattern . 0 20% 4320
    
http_port 3129
acl port_name localport 3129
tcp_outgoing_address 192.168.0.101 port_name
#tcp_outgoing_address fe62::d11e:6206:e32:f82b port_name
#http_access 192.168.0.100 deny port_name
    
acl localhost src 127.0.0.1/32 ::1
#acl to_localhost dst 127.0.0.0/8 0.0.0.0/32 ::1
   
acl SSL_ports port 1-65535
acl Safe_ports port 1-65535
acl CONNECT method CONNECT
acl siteblacklist dstdomain "/etc/squid/blacklist.acl"
http_access allow manager localhost
http_access deny manager

http_access deny !Safe_ports
http_access deny CONNECT !SSL_ports
http_access deny siteblacklist
auth_param basic program /usr/lib/squid3/basic_ncsa_auth /etc/squid/passwd

auth_param basic children 5
auth_param basic realm Squid proxy-caching web server
auth_param basic credentialsttl 2 hours
acl password proxy_auth REQUIRED
http_access allow localhost
http_access allow password
http_access deny all

forwarded_for off
request_header_access Allow allow all
request_header_access Authorization allow all
request_header_access WWW-Authenticate allow all
request_header_access Proxy-Authorization allow all
request_header_access Proxy-Authenticate allow all
request_header_access Cache-Control allow all
request_header_access Content-Encoding allow all
request_header_access Content-Length allow all
request_header_access Content-Type allow all
request_header_access Date allow all
request_header_access Expires allow all
request_header_access Host allow all
request_header_access If-Modified-Since allow all
request_header_access Last-Modified allow all
request_header_access Location allow all
request_header_access Pragma allow all
request_header_access Accept allow all
request_header_access Accept-Charset allow all
request_header_access Accept-Encoding allow all
request_header_access Accept-Language allow all
request_header_access Content-Language allow all
request_header_access Mime-Version allow all
request_header_access Retry-After allow all
request_header_access Title allow all
request_header_access Connection allow all
request_header_access Proxy-Connection allow all
request_header_access User-Agent allow all
request_header_access Cookie allow all
request_header_access All deny all

Netstat -plant 说 3128 和 3129 被鱿鱼监听:

Proto Recv-Q Send-Q Local Address           Foreign Address         State       PID/Program name    
tcp        0      0 127.0.0.1:631           0.0.0.0:*               LISTEN      389/cupsd               
tcp6       0      0 ::1:631                 :::*                    LISTEN      389/cupsd           
tcp6       0      0 :::3128                 :::*                    LISTEN      564/(squid-1)       
tcp6       0      0 :::3129                 :::*                    LISTEN      564/(squid-1)    
proxy raspberry-pi3 squid
1个回答
0
投票

首先验证两个接口是否都能访问互联网

curl --interface eth1 https://ifconfig.me
curl --interface eth2 https://ifconfig.me

根据您的设置:

  • eth1(华为E3372h):
    192.168.0.100
  • eth2(中兴MF667):
    192.168.0.101

创建新的 Squid 配置:

sudo cp /etc/squid/squid.conf /etc/squid/squid.conf.old
sudo nano /etc/squid/squid.conf

至少需要此配置,添加您想要的任何其他配置。

0.0.0.0
强制使用 ipv4。

http_port 0.0.0.0:3128
http_port 0.0.0.0:3129

acl lte1_fwd localport 3128
acl lte2_fwd localport 3129

tcp_outgoing_address 192.168.0.100 lte1_fwd
tcp_outgoing_address 192.168.0.101 lte2_fwd

http_access allow lte1_fwd
http_access allow lte2_fwd

为两个接口设置路由:

sudo echo "230 lte1_proxy" | sudo tee -a /etc/iproute2/rt_tables
sudo echo "231 lte2_proxy" | sudo tee -a /etc/iproute2/rt_tables

sudo ip rule add from 192.168.0.100 lookup lte1_proxy
sudo ip route add default dev eth1 table lte1_proxy

sudo ip rule add from 192.168.0.101 lookup lte2_proxy
sudo ip route add default dev eth2 table lte2_proxy

重新启动鱿鱼:

sudo systemctl restart squid

测试您的代理配置:

# Test through eth1 (Huawei modem)
curl --proxy http://localhost:3128 https://ifconfig.me

# Test through eth2 (ZTE modem)
curl --proxy http://localhost:3129 https://ifconfig.me
最新问题
© www.soinside.com 2019 - 2025. All rights reserved.