Linux代理配置

准备

1
2
3
sudo yum -y install curl
sudo yum -y install wget
sudo yum -y install telnet

测试方法

1
2
3
curl https://www.baidu.com
wget https://www.baidu.com
telnet www.baidu.com 443

代理测试

HTTP代理测试

1
2
curl --proxy http://127.0.0.1:10808 www.google.com
curl --proxy http://127.0.0.1:3128 www.google.com

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

1
2
curl --socks5 127.0.0.1:10808 www.google.com
curl --socks5 127.0.0.1:10808 www.baidu.com

系统全局HTTP代理

注意

这种方式只适合http代理

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

1
vi /etc/profile

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

1
2
3
4
5
6
7
8
#无用户名密码
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

1
2
export http_proxy=http://127.0.0.1:10808
export https_proxy=http://127.0.0.1:10808

或者建议这样配置

1
2
3
4
5
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。

生效配置文件

1
source /etc/profile

查看当前已设置代理

1
2
echo $http_proxy
echo $https_proxy

测试

1
2
3
wget www.google.com
# 或者
telnet google.com 80

转换Socks代理

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

安装privoxy

1
yum install -y privoxy

配置privoxy

1
vim /etc/privoxy/config

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

1
forward-socks5t / 127.0.0.1:10808 .

启动服务

1
systemctl start privoxy

设置一下系统代理变量

1
2
3
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 安装

1
sudo apt-get install tsocks

2 配置

修改配置文件:

1
sudo vim /etc/tsocks.conf

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

1
2
3
4
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 使用

1
tsocks 你的软件 &

全局Socks5配置

1
2
3
4
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链专门来设置白名单

1
2
3
4
5
6
7
8
9
10
11
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

设置白名单

1
2
release_domain="cip.cc" 
sudo iptables -t nat -I SSR -j RETURN -m comment --comment '白名单域名:'"$release_domain" -d $release_domain

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

1
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链规则

1
sudo iptables -t nat -nvL SSR --line-number

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

1
2
3
4
5
6
7
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查询,主要配置如下
官方文档

1
2
3
4
5
6
7
8
9
10
11
12
13
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服务:

1
sudo pdnsd --tcp -mto -d

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

1
START_DAEMON=yes

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