0%

socks5/http代理方法(服务端+客户端)

前言

本文讲解如何在机器上启动代理

socks5

一、安装

  • shadowsocks服务端和客户端都可以使用python3-pip进行安装,比较方便
  • 最好用管理员权限装,可以所有用户使用,否则只会装到${HOME}/.local/bin下面
  • 注意python版本尽量选择3.8左右,3.10存在另外的问题
1
sudo pip3 install shadowsocks

二、服务端配置

  • 编写/etc/shadowsocks.json文件,也可以自己定义
1
2
3
4
5
6
7
8
{
"server": "0.0.0.0",
"port_password": {
"1234": "xxxx"
},
"timeout": 600,
"method": "aes-256-cfb"
}
  • 配置都能看懂,就不详细说明了
  • 用下面的命令使用
1
ssserver -c /etc/shadowsocks.json start

1. 开机启动服务

  • 编写/usr/lib/systemd/system/ssserver.service
  • 使用绝对路径防止没有加载PATH环境变量
1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description=Shadowsocks server

[Install]
WantedBy=multi-user.target

[Service]
User=root
Group=root
ExecStart=/usr/local/bin/ssserver -c /etc/shadowsocks.json start
Restart=on-failure
  • 调用sudo systemctl enable ssserver来添加开机启动项
  • 调用sudo service ssserver start来启动服务

三、客户端使用

客户端可以使用sslocal命令

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
=> sslocal -h
usage: sslocal [OPTION]...
A fast tunnel proxy that helps you bypass firewalls.

You can supply configurations via either config file or command line arguments.

Proxy options:
-c CONFIG path to config file
-s SERVER_ADDR server address
-p SERVER_PORT server port, default: 8388
-b LOCAL_ADDR local binding address, default: 127.0.0.1
-l LOCAL_PORT local port, default: 1080
-k PASSWORD password
-m METHOD encryption method, default: aes-256-cfb
-t TIMEOUT timeout in seconds, default: 300
--fast-open use TCP_FASTOPEN, requires Linux 3.7+

General options:
-h, --help show this help message and exit
-d start/stop/restart daemon mode
--pid-file PID_FILE pid file for daemon mode
--log-file LOG_FILE log file for daemon mode
--user USER username to run as
-v, -vv verbose mode
-q, -qq quiet mode, only show warnings/errors
--version show version information
  • 配置
1
2
3
4
5
{
"server": "10.242.8.24",
"server_port": 8889,
"password": "test"
}

1. 开机自启动

同样编写/usr/lib/systemd/system/sslocal.service

1
2
3
4
5
6
7
8
9
10
11
[Unit]
Description=Shadowsocks client

[Install]
WantedBy=multi-user.target

[Service]
User=root
Group=root
ExecStart=/usr/local/bin/sslocal -c /etc/shadowsocks.json
Restart=on-failure
  • sudo systemctl enable sslocal添加开机启动项
  • sudo service sslocal start启动服务

2. 代理设置

  • 上面客户端启用仅仅是监听了1080端口做socks5代理,想要使用还需要做处理

2.1. proxychains做socks5代理

  • 如果系统支持socks5代理,可以使用export http_proxy="socks5://127.0.0.1:1080"
  • 不支持可以使用proxychains做命令行代理
  • 还有部分命令,即使设置了proxy就是不走代理,那么使用proxychains治治他们的脾气
1
sudo apt install proxychains

配置

  • 修改/etc/proxychains.conf
1
2
3
[ProxyList]
# 新增
socks5 127.0.0.1 1080

使用

1
proxychains -q git clone xxx

2.2. privoxy做http代理

  • 很多情况使用socks5不能代理,需要使用http代理
  • 可以安装privoxy来讲socks5转成http代理
1
sudo apt intall privoxy

配置

  • 编辑/etc/privoxy/config,新增配置
  • 想配置端口自己搜,默认8118
1
forward-socks5   /               127.0.0.1:1080 .
  • 改完重启服务sudo service privoxy restart

使用

  • 直接在需要修改代理的地方加上http://127.0.0.1:8118即可
  • 命令行配置
1
2
export http_proxy="127.0.0.1:8118"
export https_proxy="127.0.0.1:8118"

踩坑记

1. proxychains使用发现域名访问不通

原因是因为proxy_dns的配置问题,注释掉就好了

proxy_dns 不是单纯修改 TCP SOCKS 地址类型:

  • 开启后,proxychains 劫持程序发出的 UDP DNS 数据包,使用 SOCKS5 UDP ASSOCIATE 通道转发 DNS 查询。
  • 原版 Python sslocal仅实现 SOCKS5 TCP CONNECT,不支持 UDP ASSOCIATE。一旦开启 proxy_dns,DNS UDP 握手直接失败,整个请求超时。这是 proxychains 开启 proxy_dns 失败的根本原因,和 ssserver 的 ATYP 分支 bug 是两个独立问题。

http

一、服务端启动

1
2
3
pip install proxy.py

python -m proxy --hostname 0.0.0.0 --port 1234