如何解决linux下的代理访问
起因
想在 linux 上安装 helm,结果网速巨慢,于是想给服务器配个代理
代理安装
配置pip源
1
2
3
4
5cat > /root/.pip/pip.conf << eof
[global]
trusted-host = pypi.douban.com
index-url = http://pypi.douban.com/simple
eofpip升个级
1
yum install python3 -y && pip3 install --upgrade pip
安装ss
1
pip install shadowsocks
创建ss-local配置文件
1
2
3
4
5
6
7
8
9
10
11
12
13
14mkdir /etc/ss
cat > /etc/ss/ss.json << eof
{
"server":"ss 服务端 ip",
"server_port":"ss 服务端端口",
"local_address": "127.0.0.1",
"local_port":1080,
"password":"ss 服务端密码",
"timeout":300,
"method":"aes-256-cfb",
"fast_open": false,
"workers": 1
}
eof创建ss service
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15cat > /etc/systemd/system/ss.service << eof
[Unit]
Description=ss
[Service]
TimeoutStartSec=0
Restart=always
RestartSec=30
ExecStart=/usr/local/bin/sslocal -c /etc/ss/ss.json start
ExecStop=/usr/bin/killall sslocal
[Install]
WantedBy=multi-user.target
eof
# 如果没有 killall ,则执行
yum install psmisc -y自启动ss service
1
2
3
4
5
6
7systemctl daemon-reload
systemctl enable ss.service
systemctl start ss.service
systemctl status ss
# 到此为止,已经可以使用 ss 代理了,验证一下
curl --socks5 127.0.0.1:1080 http://httpbin.org/ip安装privoxy (为了使用 http 代理)
1
yum install privoxy -y
增加 privoxy 的配置文件
1
2
3# 增加一条转发规则
echo 'forward-socks5t / 127.0.0.1:1080 .' >> /etc/privoxy/config
# 默认配置已经打开 listen-address 127.0.0.1:8118 (http代理端口)启动 privoxy 代理
1
2
3systemctl enable privoxy
systemctl restart privoxy
systemctl status privoxy安装 proxychains-ng (为了支持单个进程的代理)
1
2
3
4
5
6
7yum install -y git
export http_proxy=http://127.0.0.1:8118; export https_proxy=https://127.0.0.1:8118; # 解决 git 慢的问题
git clone --depth=1 https://github.com/rofl0r/proxychains-ng
yum install gcc -y
cd proxychains-ng
./configure --prefix=/usr --sysconfdir=/etc
make && make install && make install-config修改 proxychains 配置
1
2vim /etc/proxychains.conf
# 把最后一行的 socks4 127.0.0.1 9050 改成 socks5 127.0.0.1 1080起个别名
1
ln -s /usr/bin/proxychains4 /usr/bin/proxy
测试一下
1
proxy curl www.google.com
自此以后,如果没法访问一些资源,则使用:
proxy + 要执行的命令
如果想在整个终端中使用 http 代理,则: (这是 privoxy 带来的)
1 |
|
以下,终于可以不受限制地安装helm了。。。
1 |
|
相关的程序也可以看下: polipo
其他 ss 问题
如果希望使用多级 ss (一台机器 作为 另一台机器的 中转 ss)
- 能够使用 ssh, 则参照 反穿技术哪家强
- 能够使用 ss-tunnel,则 ① 中转机启动 ss-local (假设本地代理端口为 50000) ② 中转机启动 ss-server ③ 使用
ss-tunnel -l 1080 -b 127.0.0.1 -L 127.0.0.1:50000
(监听本地 1080)。这种方案 和 ssh 的方案本质一样,都是转发本地端口到远端端口。 - 仅能使用 ss-local,则 ① 中转机启动 ss-local, 用于连接到上位ss ② 中转机启动 ss-server, 用于承接 PC 上的连接 ③ 使用 proxy ssserver
- 如果中转机上使用的 ss-local , 那么任何能提供
认证
能力的 tunnel,都能满足需求,比如 gost、nps、clash - 最简单的方式,是直接用 iptables 转发即可,直接使用
iptables -t nat -A PREROUTING -4 -p tcp --dport 50000 -j DNAT --to-destination xxx.xxx.xxx.xx:50001
即可 (本地 50000 转发到 上位 ss 的 50001)
ps: 使用 iptables 有两个坑要注意下,① 要配置 内核参数允许转发net.ipv4.ip_forward = 1
② 要设置出网 ip 替换iptables -t nat -A POSTROUTING -4 -p tcp --dport 50001 -j MASQUERADE
,否则回包的地址就错了注意,server 端要配置 /etc/ssh/sshd_config 的 GatewayPorts yes,允许包的转发
如果想用 ss 作为全局代理,可以使用
redsocks + iptables
的方案。ssh 其实非常强大, 我们完全可以不用 ss-server 作为代理,直接使用
ssh -D 1080 user@host
, 就能做到同样的事情。调试网络的过程中,有几个很好用的工具
ss
查看 socket 相关信息,和 netstat 有重合的部分netstat
查看 socket 相关信息、路由信息ip
查看或修改 路由、网卡ifconfig
网卡信息查看及配置tcpdump
tcp 抓包工具 tcpdumptelnet
远程登录nc
socket 转发 一些常用的linux命令记录iptables
iptables 管理工具ipvsadm
ipvs 管理工具dig
/nslookup
dns 查询curl
支持多种应用层协议的工具
希望 ss 有认证、流量计费能力,可以结合 RADIUS ,具体可以参考: http://ss5.sourceforge.net/configuration.htm
ssserver 在使用 vpn 的场景下会有一个问题 => 连接到 ssserver 的 client 无法访问 vpn 后面的服务。这预计是由于 ssserver 收到包之后,直接从网关转出去了,而没有重新走 routes (具体原因待探究)。 在测试这个问题时,发现使用 clash 在同样场景下是可以访问 vpn 后面的服务的。 clash 是一个更丰富、更强大的代理工具,可以认为是 代理 + 代理的代理,并且配备了 DNS-server,这在一些有特殊 DNS resolve 需求的场景下就非常好用了。
clash 是一个聚合型的代理客户端,可以参考 clash 非官方wiki ,桌面端可以搜索 clashx,web ui 可以查看 yacd ,clash 也同样可以作为 http / sock5 代理节点。
本博客所有文章除特别声明外,均采用 CC BY-SA 4.0 协议 ,转载请注明出处!