GHL's Notes/

利用 iptables+redsocks+Clash 快速实现Linux全局科学上网

Clash 是一款我非常喜欢的一个上网工具,它优雅灵活,功能丰富又配置简单。因此我放弃了什么小飞机,v2等等客户端,全平台改用clash。最近遇到了个问题,那就是虚拟机的Linux很难实现全局代理,总是有些傻逼软件不喜欢走代理,要手动给他加--proxy这样的参数,很是烦人。

后来我想了个办法,就是这个

配置环境

虚拟机

系统: Debian 10

主电脑

系统: Windows 10
Clash For Windows: 0.11.1

方法

Clash配置

首先在Clash For Windows主面板里打开allow lan,然后在配置文件里加上(proxies上面)以下配置

 dns:   
   enable: true
   listen: 192.168.xx.1:53  
   enhanced-mode: redis-host   
   nameserver:
     - 119.29.29.29
     - 114.114.114.114
     - 8.8.8.8
     - 1.1.1.1
     - tls://dns.pub:853
     - tls://dns.google:853
     - https://doh.pub/dns-query
     - https://dns.google/dns-query

其中xx是你的虚拟机子网,1一般都是代表主机的。

虚拟机Nameserver配置

然后打开虚拟机,把/etc/resolv.conf里的nameserver统统删掉换成

nameserver 192.168.xx.1(xx就是你的虚拟机子网)

保存然后,systemctl restart networking

这一步主要是防止虚拟机错误的解析出域名,例如谷歌之类的

Redsocks配置

然后开始配置Redsocks

编辑文件/etc/redsocks.conf
找到local_port,改一个你喜欢的,要记住,下面ufw要用到

然后找到ip,填上192.168.xx.1(虚拟机子网主机)
端口填你的clash Socks5端口,保存启动

UFW配置

然后开始配置ufw

先开放所有,毕竟虚拟机又不需要什么端口限制

ufw default allow outgoing
ufw default allow incoming

然后编辑/etc/default/ufw,找到DEFAULT_FORWARD_POLICY一行,把DROP改成ACCEPT

然后在/etc/sysctl.conf添加

`net.ipv4.ip_forward = 1

然后sysctl -p`

然后/etc/ufw/before.rules添加下面一行

*nat
:POSTROUTING ACCEPT - [0:0]
:SOCKS ACCEPT - [0:0]
:OUTPUT ACCEPT - [0:0]
-A SOCKS -d 0.0.0.0/8 -j RETURN
-A SOCKS -d 127.0.0.0/8 -j RETURN
-A SOCKS -d 192.168.0.0/16 -j RETURN
....(添加你的虚拟机子网段,非常重要,否则会把虚拟机局域网流量引到主机上)
-A SOCKS -p tcp -j REDIRECT --to-ports xxxx(你的redsocks local_port端口)
-A OUTPUT -p tcp -j SOCKS
-A POSTROUTING -j MASQUERADE
COMMIT

然后启动ufw,ufw enable && ufw reload,好像不reload没发完全加载,然后你发现所有软件都走代理了,真正的全局代理,不再是system proxy那种虚假全局代理了。

留下一条评论

暂无评论