clash是强大的开源代理软件,支持在各种平台上面运行,但默认的配置是socks代理和http代理,想拿它做旁路网关还需要一些操作。
直接下载最新的 Release
就行了。
配置文件在~/.config/clash/config.yaml
<--! more -->
创建一个本地的systemd
配置/etc/systemd/system/clash.service
[Unit] Description=clash service After=network.target [Service] Type=simple ExecStart=/usr/local/bin/clash -d /etc/clash/ Restart=on-failure [Install] WantedBy=multi-user.target
systemctl start clash.service systemctl enable clash.service # 然后测试下 socks 代理是否可用 curl --socks5 localhost:7891 google.com
clash里面有内置的dns,如果直接用那么大可不必开启内置的dns服务器,但是想用旁路网关,那么需要开启内置的dns。内置的dns服务器有redir-host
和fake-ip
两种模式:
redir-host
对于转发过来的请求,一律先用nameserver
和fallback
里面的dns服务器进行解析,如果是外国的地址,那么后续就用fallback
里的dns服务器,如果是国内的那就直连。
fake-ip
不管啥请求,先返回一个虚拟的ip,因为如果是代理,那么是代理服务器进行的远端解析,比redir-host
节约一些开销。
只要用了旁路网关,那就得把客户机的dns服务器也设置成clash的dns服务,因为clash需要用dns服务反推域名和ip的对应关系。
可能我说的不清楚,我也理解的不太对,但是我在实际使用中发现,如果我把clash用做旁路网关,并且设置了fake-ip,那么我ping一个网址,或者wget下载一个东西,都直接对假ip进行连接了,换句话说除了浏览器之外别的服务不对劲了。所以旁路网关还是用redir-host模式吧,然后客户机的网关和dns都指向clash的主机,这样可以保证服务都没问题,udp的也ok。
所以我的解决方案就是:PVE
里一个LXC容器
里装Clash
另一个装AdGuardHome
,然后Clash
里开启dns服务器,选择redir-host
模式,不用fallback
,就一个nameserver
指向我的AdGuardHome
。在AdGuardHome
里,把dns设置成:
这两个都是支持DoH/DoT的,可以防止dns污染,这样所有的dns上游都是AdGuardHome了,可以用来防广告,就是不能根据客户端做单独的服务屏蔽了(这个我还没有好办法),但是我用iKuai
做管控,所以没啥影响。
配置参考 配置完毕后就能用socks代理或者http代理直接用了,但是想要实现旁路网关,还需要设置转发。
参考:
旁路网关自身流量最好别走透明代理,为了实现旁路网关,我们需要转发流量,可以用iptalbes
或者nftables
,我用的后者而且测试ok,前者没试过.
apt install nftables -y
创建私有地址定义文件/etc/nftables/private.nft
(私有地址咱们不转发):
define private_list = { 0.0.0.0/8, 10.0.0.0/8, 127.0.0.0/8, 169.254.0.0/16, 172.16.0.0/12, 192.168.0.0/16, 224.0.0.0/4, 240.0.0.0/4 }
/etc/nftables.conf
:#!/usr/sbin/nft -f include "/etc/nftables/private.nft" table ip nat { chain proxy { ip daddr $private_list return ip protocol tcp redirect to :7892 } chain prerouting { type nat hook prerouting priority 0; policy accept; jump proxy } }
sudo sh -c "nft flush ruleset && nft -f /etc/nftables.conf"
设置服务:
systemctl enable nftables.service systemctl start nftables.service
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf sysctl -p
没用过,不保证效果
iptables -t nat -N CLASH # 私有 ip 流量不转发,完整的在下面 # 设置的 fake-ip 请注意检查这里 iptables -t nat -A CLASH -d 192.168.0.0/16 -j RETURN iptables -t nat -A CLASH -p tcp -j REDIRECT --to-ports 7892 iptables -t nat -A PREROUTING -p tcp -j CLASH
# 内部流量不转发给 CLASH 直通 iptables -t nat -A CLASH -d 0.0.0.0/8 -j RETURN iptables -t nat -A CLASH -d 10.0.0.0/8 -j RETURN iptables -t nat -A CLASH -d 127.0.0.0/8 -j RETURN iptables -t nat -A CLASH -d 169.254.0.0/16 -j RETURN iptables -t nat -A CLASH -d 172.16.0.0/12 -j RETURN iptables -t nat -A CLASH -d 192.168.0.0/16 -j RETURN iptables -t nat -A CLASH -d 224.0.0.0/4 -j RETURN iptables -t nat -A CLASH -d 240.0.0.0/4 -j RETURN
然后就是规则持久化,百度就行了。
这个nftables
里面写的规则好像不包括udp
协议,如果我想让clash
接管udp
流量,比如我p2p
下载也想走代理,怎么搞……有空研究吧,我感觉我得多了解一下相关知识了。
在 Ubuntu18.04 上使用 clash 部署旁路代理网关(透明代理)
debian10 使用 nftables 替换 iptables
我是基于懒人规则合集中例子配置的,最后我想配合adguardhome
进行,所以我弄了俩,一个负责nameserver
,里面都是国内的上游DoH和DoT,然后另一个负责fallback
里面都是国外的。然后关闭fallback-filter
,具体可以看我的另一片文章。
本文作者:mereith
本文链接:
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!