0%

redsocks搭配iptables实现真全局代理

安装redsocks

代码库redsocks,直接clone到本地。

前置条件:安装libevent和build-essential。

进入clone的目录,直接输入make命令编译,只要不是错误,警告消息可以忽略。在目录下会出现一个redsocks的可执行文件。

redsocks配置

在目录下新建一个配置文件redsocks.conf,目录下有个叫redsocks.conf.example的全量配置文件,复制它的内容到redsocks.conf,然后修改之,以下把很多注释的东西删除了,改动的地方已标明。

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
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
base {
log_debug = off;
log_info = on;
daemon = off;
redirector = iptables;
}

redsocks {
local_ip = 127.0.0.1;
local_port = 12345; <= 这端口试tcp监听端口

ip = 127.0.0.1; <= socks5 服务地址
port = 1081; <= socks5 服务端口

type = socks5; <= 一般都是 socks5 (ss, tro..)
}

redudp {
local_ip = 127.0.0.1;
local_port = 10053; <= 这端口试udp监听端口

ip = 127.0.0.1; <= socks5 服务地址
port = 1081; <= socks5 服务端口

// login = username; <= 无需登录信息,删除
// password = pazzw0rd; <= 同上

dest_ip = 8.8.8.8;
dest_port = 53;

udp_timeout = 30;
udp_timeout_stream = 180;
}

dnstc {
local_ip = 127.0.0.1;
local_port = 5300;
}

dnsu2t {
local_ip = 127.0.0.1;
local_port = 5313;

remote_ip = 8.8.8.8;
remote_port = 53;
}

启动redsocks

输入./redsocks运行,默认读取目录下的redsocks.conf,也可后台启动,自行配置。

iptables配置

启动防火墙sudo ufw enable,新建以下防火墙脚本,运行后即可全局上,建议先iptables-save > /etc/iptables.rules保存修改前的防火墙,用完后可恢复iptables-restore /etc/iptables.rules

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
27
#!/bin/bash

# Create new chain
iptables -t nat -N REDSOCKS

# 以下xxx.xxx.xxx.xxx是你的远程代理服务器ip,防止循环
iptables -t nat -A REDSOCKS -d xxx.xxx.xxx.xxx -j RETURN
iptables -t nat -A REDSOCKS -d 127.0.0.1 -j RETURN
iptables -t nat -A REDSOCKS -d 0.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 10.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 100.64.0.0/10 -j RETURN
iptables -t nat -A REDSOCKS -d 127.0.0.0/8 -j RETURN
iptables -t nat -A REDSOCKS -d 169.254.0.0/16 -j RETURN
iptables -t nat -A REDSOCKS -d 172.16.0.0/12 -j RETURN
iptables -t nat -A REDSOCKS -d 192.168.0.0/16 -j RETURN
iptables -t nat -A REDSOCKS -d 198.18.0.0/15 -j RETURN
iptables -t nat -A REDSOCKS -d 224.0.0.0/4 -j RETURN
iptables -t nat -A REDSOCKS -d 240.0.0.0/4 -j RETURN

# Anything else should be redirected to port 12345
iptables -t nat -A REDSOCKS -p tcp -j REDIRECT --to-ports 12345
# 以下是udp的转发,端口是上述配置文件中的 redudp->local_port
# 如果开启udp,那么以下的tcp转发规则需要多一份针对udp的,改一下-p参数即可,未测试。
# iptables -t nat -A REDSOCKS -p udp -j REDIRECT --to-ports 10053

iptables -t nat -A OUTPUT -p tcp -j REDSOCKS
iptables -t nat -A PREROUTING --in-interface enp3s0 -p tcp -j REDSOCKS # 注意修改网卡enp3s0名称