😀
我日常使用Arch Linux来进行办公,但公司的办公网络和上网需要挂不同的代理,浏览器切换起来有点麻烦,我需要一个解决方案支持配置规则的方式来让我系统上的流量进行选择性的转发,我发现Clash+iptables(Linux用户独有的福利)可以非常简单的做到。
📝Clash是什么?
clash
Dreamacro • Updated Sep 26, 2023
Clash是一个支持多种协议隧道转发的工具,主要功能如下:
- Inbound: HTTP, HTTPS, SOCKS5 server, TUN device
- Outbound: Shadowsocks(R), VMess, Trojan, Snell, SOCKS5, HTTP(S), Wireguard
- Rule-based Routing: dynamic scripting, domain, IP addresses, process name and more
- Fake-IP DNS: minimises impact on DNS pollution and improves network performance
- Transparent Proxy: Redirect TCP and TProxy TCP/UDP with automatic route table/rule management
- Proxy Groups: automatic fallback, load balancing or latency testing
- Remote Providers: load remote proxy lists dynamically
- RESTful API: update configuration in-place via a comprehensive API
目前作者还在维护高级核心版(免费),为了尝试支持更多功能。
🪢关于透明代理
这里可以参考之前写过的一篇介绍:
配置Clash服务
这里需要注意的是需要设置redir-port,这个选项: Linux 和 macOS 的透明代理服务端口 (TCP 和 TProxy UDP 重定向)
除此之外,最好编写一个服务文件,将Clash运行在其他用户身份下:
将服务文件拷贝到:/etc/systemd/system/
设置DNS服务器地址,直接/etc/resolv.conf文件即可:
配置iptables规则
在iptables中有一个owner模块,可以过滤指定用户的流量,对我们来说只需要将clash运行在一个单独的用户身份下,对这个用户的所有流量放行即可。
iptables命令:
这个命令的意思是将所有不属于用户ID为"clash"的TCP流量重定向到端口7892。
配置Clash规则
通过rules可以配置不同的DNS域名、IP-CIDR目标地址的流量该走到哪个代理链上,这里我的规则仅仅只是示例,为了达到更好的网络体验,规则是上达几百行的。
如此一来,工作/上网问题不需要切换代理解决了。