(本文假设阅读者已经熟练使用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配置。

 

相关文章: