Linux代理配置

2022-09-23 09:43:42 浏览数 (1)

准备

代码语言:javascript复制
sudo yum -y install curl
sudo yum -y install wget
sudo yum -y install telnet

测试方法

代码语言:javascript复制
curl https://www.baidu.com
wget https://www.baidu.com
telnet www.baidu.com 443

代理测试

HTTP代理测试

代码语言:javascript复制
curl --proxy http://127.0.0.1:10808 www.google.com
curl --proxy http://127.0.0.1:3128 www.google.com

如果是Socks5代理,可以参考下面的代码

代码语言:javascript复制
curl --socks5 127.0.0.1:10808 www.google.com
curl --socks5 127.0.0.1:10808 www.baidu.com

系统全局HTTP代理

注意

这种方式只适合http代理

设置全局代理,需要编辑profile文件

代码语言:javascript复制
vi /etc/profile

末尾添加以下代理配置,参考代理是否需要用户名密码

代码语言:javascript复制
#无用户名密码
export http_proxy=http://proxy_ip:prot
export https_proxy=https://proxy_ip:prot

#有用户名密码
export http_proxy=http://username:password@proxy_ip:prot
export https_proxy=https://username:password@proxy_ip:port
export ftp_proxy=http://username:password@proxyserver:port

代码语言:javascript复制
export http_proxy=http://127.0.0.1:10808
export https_proxy=http://127.0.0.1:10808

或者建议这样配置

代码语言:javascript复制
http_proxy=proxy.abc.com:8080  
https_proxy=$http_proxy  
ftp_proxy=user:password@proxy.abc.com:8080  
no_proxy=*.abc.com,10.*.*.*,192.168.*.*,*.local,localhost,127.0.0.1  
export http_proxy https_proxy ftp_proxy no_proxy

其中:

http_proxy:http协议使用代理服务器地址; https_proxy:https协议使用安全代理地址; ftp_proxy:ftp协议使用代理服务器地址; user:代理使用的用户名; password:代理使用用户名的密码; proxy.abc.com:代理地址,可以是IP,也可以是域名; 8080:使用的端口; no_proxy:不使用代理的主机或IP。

生效配置文件

代码语言:javascript复制
source /etc/profile

查看当前已设置代理

代码语言:javascript复制
echo $http_proxy
echo $https_proxy

测试

代码语言:javascript复制
wget www.google.com
# 或者
telnet google.com 80

转换Socks代理

系统代理只能设置HTTP代理,但是使用privoxy将socks5转换为http代理

安装privoxy

代码语言:javascript复制
yum install -y privoxy

配置privoxy

代码语言:javascript复制
vim /etc/privoxy/config

末尾增加下面内容,/后面是代理服务器的地址:端口,注意最后还有个.

代码语言:javascript复制
forward-socks5t / 127.0.0.1:10808 .

启动服务

代码语言:javascript复制
systemctl start privoxy

设置一下系统代理变量

代码语言:javascript复制
export all_proxy=http://127.0.0.1:8118
export http_proxy=http://127.0.0.1:8118
export https_proxy=http://127.0.0.1:8118

注:8118是privoxy默认使用的端口

配置Socks5代理软件

Linux 有一个能够强迫任何软件通过 SOCKS 代理上网的工具,其名就是 tsocks。Tsocks 是一个透明 SOCKS 代理软件。

1 安装

代码语言:javascript复制
sudo apt-get install tsocks

2 配置

修改配置文件:

代码语言:javascript复制
sudo vim /etc/tsocks.conf

将其内容改成以下几行并保存退出:

代码语言:javascript复制
local = 192.168.1.0/255.255.255.0 #local表示本地的网络,也就是不使用socks代理的网络
server = 127.0.0.1 # SOCKS 服务器的 IP
server_type = 5 # SOCKS 服务版本
server_port = 10808 # SOCKS 服务使用的端口

3 使用

代码语言:javascript复制
tsocks 你的软件 &

全局Socks5配置

代码语言:javascript复制
sudo iptables -t nat -F    # 清空nat表规则
sudo iptables -t nat -N SSR    # 新建SSR链
sudo iptables -t nat -A SSR -j REDIRECT -p tcp --to-ports 12345 -m comment --comment 'redsocks全局SSR代理'
sudo iptables -t nat -A OUTPUT -j SSR -p tcp -m comment --comment '跳转到redsocks全局SSR代理'

我们要做的就是放行局域网和socks5代理服务器IP,此处我们往OUTPUT链里设置,设置到SSR链也可以,不过最好用SSR链专门来设置白名单

代码语言:javascript复制
sudo iptables -t nat -I OUTPUT -j RETURN -m comment --comment '局域网放行' -d 0.0.0.0/8
sudo iptables -t nat -I OUTPUT -j RETURN -m comment --comment '局域网放行' -d 10.0.0.0/8
sudo iptables -t nat -I OUTPUT -j RETURN -m comment --comment '局域网放行' -d 100.64.0.0/10
sudo iptables -t nat -I OUTPUT -j RETURN -m comment --comment '局域网放行' -d 127.0.0.0/8
sudo iptables -t nat -I OUTPUT -j RETURN -m comment --comment '局域网放行' -d 169.254.0.0/16
sudo iptables -t nat -I OUTPUT -j RETURN -m comment --comment '局域网放行' -d 172.16.0.0/12
sudo iptables -t nat -I OUTPUT -j RETURN -m comment --comment '局域网放行' -d 192.168.0.0/16
sudo iptables -t nat -I OUTPUT -j RETURN -m comment --comment '局域网放行' -d 198.18.0.0/15
sudo iptables -t nat -I OUTPUT -j RETURN -m comment --comment '局域网放行' -d 224.0.0.0/4
sudo iptables -t nat -I OUTPUT -j RETURN -m comment --comment '局域网放行' -d 240.0.0.0/4
sudo iptables -t nat -I OUTPUT -j RETURN -m comment --comment 'socks5代理服务器放行' -d 47.95.255.46

设置白名单

代码语言:javascript复制
release_domain="cip.cc" 
sudo iptables -t nat -I SSR -j RETURN -m comment --comment '白名单域名:'"$release_domain" -d $release_domain

由于这个操作很频繁,所以我写了一行交互式的脚本

代码语言:javascript复制
read -p 请输入要设置白名单的域名: release_domain && sudo iptables -t nat -I SSR -j RETURN -m comment --comment '白名单域名:'"$release_domain" -d $release_domain && sudo iptables -t nat -nvL --line-number

查看SSR链规则

代码语言:javascript复制
sudo iptables -t nat -nvL SSR --line-number

添加自定义命令在.bashrc中添加alias别名,从而提供一键启用/关闭代理的命令

代码语言:javascript复制
alias ssrclose="sudo iptables -t nat -j RETURN -m comment --comment 临时关闭代理 -I SSR"
alias ssrstart="sudo iptables -t nat -j RETURN -m comment --comment 临时关闭代理 -D SSR"
alias ssrstatus="sudo iptables -t nat -nvL SSR --line-number"

function ssradd() {
    read -p 请输入要设置白名单的域名: release_domain && sudo iptables -t nat -I SSR -j RETURN -m comment --comment '白名单域名:'"$release_domain" -d $release_domain && sudo iptables -t nat -nvL --line-number
}

DNS污染的解决办法

什么是pdnsd

p dns d -> Proxy DNS Daemon

安装pdnsd执行tcp查询,主要配置如下 官方文档

代码语言:javascript复制
server {
    label = "root-servers";
    root_server=on;
    ip = 8.8.8.8;
    timeout = 5;
    uptest = query;
    interval = 30m;  
    ping_timeout = 300; 
    purge_cache = off;
    exclude = .localdomain;
    policy = included;
    preset = off;
}

启动本地DNS服务:

代码语言:javascript复制
sudo pdnsd --tcp -mto -d

为了开机启动pdnsd,编辑 /etc/default/pdnsd 文件,修改下列行:

代码语言:javascript复制
START_DAEMON=yes

接下来修改/etc/resolv.conf,将DNS改为127.0.0.1即可

0 人点赞