(本文假设阅读者已经熟练使用clash for windows。)
目的: 把一台闲置ubuntu,搞成旁路由(下文里的"旁路由"或"ubuntu"都是指这台ubuntu机器)。搞成后,想要FQ的设备比如iphone,把其网关和DNS设置为ubuntu的IP就可以了。
一、
首先下载clash for linux:https://github.com/Dreamacro/clash/releases 选择clash-linux-amd64-v1.9.0.gz 下载下来,然后scp到ubuntu上,mv到/usr/local/bin/clash。
然后,把clash for windows里的配置文件(比如我的就是1635905184920.yml)放到ubuntu的/etc/clash/目录下(需创建此目录),并改名为/etc/clash/config.yaml
修改此yaml文件的前面部分:
# HTTP 代理端口
port: 7890
# SOCKS5 代理端口
socks-port: 7891
# Linux 和 macOS 的 redir 代理端口
redir-port: 7892
# 允许局域网的连接
allow-lan: true
# 规则模式:Rule(规则) / Global(全局代理)/ Direct(全局直连)
mode: rule
# 设置日志输出级别 (默认级别:silent,即不输出任何内容,以避免因日志内容过大而导致程序内存溢出)。
# 5 个级别:silent / info / warning / error / debug。级别越高日志输出量越大,越倾向于调试,若需要请自行开启。
log-level: silent
# Clash 的 RESTful API
external-controller: '0.0.0.0:9090'
# RESTful API 的口令
secret: ''
dns:
enable: true
ipv6: false
listen: 0.0.0.0:53
#enhanced-mode: redir-host
enhanced-mode: fake-ip
nameserver:
- 114.114.114.114
- 223.5.5.5
- tls://dns.rubyfish.cn:853
fallback:
- 114.114.114.114
- tls://dns.rubyfish.cn:853
- 8.8.8.8
experimental:
ignore-resolve-fail: true
proxies: ## 从这儿开始后面的就不用改动了.
请特别注意:搞旁路由,yaml配置这里enhanced-mode: fake-ip 必须是fake-ip!
请留意上面的配置,要把53端口作为dns服务监听端口了。这可能会和本地的dns的53端口冲突,因此必须关闭本地53端口服务:
sudo systemctl disable systemd-resolved
请关注上面的配置项:external-controller: '0.0.0.0:9090' 下面会用到。
二、
把clash弄成系统服务:
在ubuntu里, sudo vi /etc/systemd/system/clash.service 编辑如下:
[Unit] Description=clash service After=network.target [Service] Type=simple User=root ExecStart=/usr/local/bin/clash -d /etc/clash Restart=on-failure [Install] WantedBy=multi-user.target
使该服务生效,输入命令:
sudo systemctl daemon-reload
sudo systemctl enable clash
现在就可以手动启动clash了(重启后会自启动):
sudo service clash start
此时可以在任何一台局域网的电脑上通过浏览器设置或查看clash的代理设置:
web控制台: http://clash.razord.top 或 http://yacd.haishan.me/ 可选(输入旁路由的ip和9090端口即可); 原理是 js 和 本地socket通信。
三、
设置iptables(都是nat规则),ubuntu里输入以下命令:
sudo iptables -t nat -N CLASH
sudo iptables -t nat -A CLASH -d 192.168.0.0/16 -j RETURN
sudo iptables -t nat -A CLASH -d 127.0.0.0/8 -j RETURN
sudo iptables -t nat -A CLASH -p tcp -j REDIRECT --to-ports 7892
sudo iptables -t nat -A PREROUTING -p tcp -j CLASH
补充知识:iptables相关命令:
sudo iptables -L # 查看所有iptables规则(但是不含我们搞的nat规则)
sudo iptables -t nat -L -n --line-numbers # 查看所有iptables的nat的规则
sudo iptables -t nat -F # 清空所有iptables的nat的规则
为了让iptables在重启系统后依然生效,需要:
sudo apt install iptables-persistent
安装的过程中会提示你是否需要保存 iptables 配置,直接选是就⾏。这时候即使电 脑重启了也会应⽤这些路由规则。 如果后⾯你有需要重新修改 iptables 的配置,那么只需要在执⾏完 iptables 之后再 执⾏: sudo iptables-save > /etc/iptables/rules.v4
最后,要让Linux系统具有路由转发功能,还必须配置一个Linux的内核参数net.ipv4.ip_forward :
sudo vim /etc/sysctl.conf
net.ipv4.ip_forward=1
四、
好了。需要FQ的设备,设置其网关和DNS为旁路由的IP即可。(因此应通过路由器固定ubuntu的IP)。ps:路由器无需修改网关或DNS配置。