Linux实现socks终端代理和全局代理

  小程序备案     |      2023-09-03
Linux实现socks终端代理和全局代理

一、使用场景

GFW会拦截并屏蔽特定的国外IP段,使我们无法访问对端,此时我们需要使用socks协议的转发代理功能,它负责为我们将请求转发到国外可用的服务器上,然后这个服务器将请求转发到任何你想要访问的外网资源。其中最关键的部分是进行流量中转的国外服务器,如下图:

因此,跨越GFW拦截的前提是你有一台运行在国外的socks服务器。本文不再提及socks服务器的搭建。很多代理软件都可以实现。不建议单独购买海外服务器搭建,性价比低,容错率低。

以下操作均以机器备案合规为前提。

二、socks支持的代理协议

ocks运行在会话层,可以代理TCP、UDP本身以及基于它们的协议,如http/https over tcp、http3 over udp(quic),但不能代理icmp,所以无法ping通Google通过socks,不要以为是代理软件或者节点的问题,是你的问题!

三、客户端安装

ocks协议代理可以通过很多软件实现,本文介绍的是著名的ss/ssr代理,只需将shadowsocksR项目clone到本地即可:

$ cd /usr/share$ git clone https://github.com/RokasUrbelis/shadowsocksr $ cd ./shadowsocksr 复制初始化环境:bash initcfg.sh

客户端路径在./shadowsocks/local.py

客户端配置文件:user-config.json

四、写sytemd服务

仅用于支持systemd服务的linux发行版,其他发行版请参考相关发行版的服务管理软件

$ mkdir -p ~/.config/systemd/user #创建存放systemd服务的目录$ vim ~/.config/systemd/user/ssr-client.service[Unit]Description=Shadowsocks R Client ServiceAfter=default.tarGET@[ Service]ExecStart=/usr/bin/python /usr/share/shadowsocksr/shadowsocks/local.py -c /usr/share/shadowsocksr/shadowsocks/user-config.json #Restart=on-abort 根据你的实际路径[安装]WantedBy=default.target$ 复制通过systemd管理服务

$ systemctl --user daemon-reload #重新加载daemon进程,写完systemd后执行一次即可,以后不需要执行$ systemctl --user status ssr-client #查看运行状态$ systemctl -- user start ssr-client #重启ssr客户端$ systemctl --user restart ssr-client #重启ssr客户端copy 如果没有systemd服务,又不想把它写成服务,也可以使用懒惰的——衬垫:

$ { nohup /usr/share/shadowsocksr/shadowsocks/local.py -c /usr/share/shadowsocksr/shadowsocks/user-config.json /dev/null; $ alias ssrstart='{ nohup /usr/share/shadowsocksr /shadowsocks/local.py -c /usr/share/shadowsocksr/shadowsocks/user-config.json /dev/null; } ' 复制:

五、ssr-config.json/user-config.json配置格式

ssr:

{ '服务器': 'blog.linux-code.com', 'local_address': '127.0.0.1', 'local_port': 1080, '超时': 300, 'workers': 1, 'server_port': 3071, '密码':'测试','方法':'rc4-md5','obfs':'http_simple','obfs_param':'download.linux-code.com','协议':'origin','protocol_param' : ''} 复制ss:

{ '服务器': 'blog.linux-code.com', 'local_address': '127.0.0.1', 'local_port': 1080, '超时': 300, 'workers': 1, 'server_port': 3071, ' password': 'test', 'method': 'rc4-md5', 'plugin': ''} 复制:

六、代理测试

服务正常运行后,使用以下命令临时测试连通性:

$ export http_proxy=http://127.0.0.1:1080$ export http_proxy=https://127.0.0.1:1080 #export 仅对你当前的终端(pts/tty)有效,如果你想将其设置为全局代理,请不要惊慌,添加上面两个命令放到~/.bashrc就够了,其他解释器放在各自的配置文件中,zsh是~/.zshrc。

接下来访问Google看看:

$ telnet google.com 80尝试93.46.8.90.连接到google.com。转义字符是“^]”。如果复制成功,则说明运行正常,节点状态正常:

要取消当前终端代理,请使用unset http_proxy https_proxy

七、Proxychains

将proxychains 与ss/ssr 客户端一起使用将使管理您的袜子代理变得更容易、更有针对性

1)安装

$ git clone https://github.com/rofl0r/proxychains-ng.git$ cd proxychains-ng$ ./configure$ make sudo make install$ sudo cp ./src/proxychains.conf /etc/proxychains.conf 复制:

2)修改配置文件

$ sudo vim /etc/proxychains.confsocks5 127.0.0.1 1080 #根据实际情况更改,这里以ssr代理为例socks5 127.0.0.1 1081http xx.xx.xx.xx 9000 #添加http代理$复制:

3)配置文件参数说明

strict_chain(默认开启) 按照下面列表中代理服务器出现的顺序形成一条链,并且要求所有代理服务器都有效。

dynamic_chain(默认关闭) 根据代理服务器在列表中出现的顺序形成一条链。如果任何代理服务器出现故障,它将被自动排除,但至少其中一个必须有效。

可以使用random_chain列表中的任何代理服务器(默认关闭),这非常适合网络扫描操作(参数chain_len仅对random_chain有效)。

proxy_dns(默认打开)代理DNS 请求。

ProxyList添加代理列表,如http、socks4/5、auth user/pass等

4)使用方法

只是在命令前面添加proxychains,但也不能代理icmp,因为proxychains使用socks,如果要代理icmp等全协议,建议使用vpn相关软件

wget谷歌主页:

$ proxychains4 -q wget google.com 复制youtube视频下载:

$ proxychains4 -q youtube-dl https://www.youtube.com/watch?v=W76ZGZGCpPs 复制加速git clone:

$ proxychains4 -q https://github.com/RokasUrbelis/System-security-testing 副本