Centos7下使用clash做透明代理

2020-06-29 5 条评论 1.93k 次阅读 0 人点赞

Centos7下使用clash做透明代理

相关链接地址:

clash主程序: https://github.com/Dreamacro/clash/releases

dashboard: https://codeload.github.com/Dreamacro/clash-dashboard/zip/gh-pages

clash的作者Dreamacro大神制作了dashboard作为可视化的设置界面,界面优美,作为切换节点、更改端口的日常使用比较方便,在大神的项目中可以看到clash-dashboard的源码,对于初次在Linux上安装使用clash的小白用户来说,dashboard的安装可能就是个坑了,项目源码需要npm运行,epel源中的npm版本较低,无法科学上网的时候更新npm各种难受。

作者在dashboard项目分支gh-pages中编译好了,下载zip解压就可以使用了,但是作者在说明里没有提及

1.准备工作
  • 设定静态IP地址
  • 关闭selinux
  • 清空iptables
  • 创建clash用户
  • 授权sudo
2.安装主程序

下载解压后移动并重命名为/usr/local/bin/clash

[clash@localhost ~]$ ls -l /usr/local/bin/clash
-rw-rw-r--. 1 clash clash 9175040 May  7 22:08 /usr/local/bin/clash
[clash@localhost ~]$ sudo chmod +x /usr/local/bin/clash   #增加执行权限
# 为 clash 添加绑定低位端口的权限,这样运行 clash 的时候无需 root 权限
[clash@localhost ~]$ sudo setcap cap_net_bind_service=+ep /usr/local/bin/clash
3. 配置文件及dashboard

主配置文件:/home/clash/.config/clash/config.yml
dasboard:/home/clash/.config/clash/ui
配置文件头部:

# 以下部分不要修改!
port: 7890
socks-port: 7891
redir-port: 7892
allow-lan: true

mode: Rule

log-level: info
# external-controller 主要是用于 web 端管理页面,必须监听在 0.0.0.0
external-controller: 0.0.0.0:9090

# secret 是进入管理面板所需要的密码,可填可不填,建议填上
secret: "secret-password"

# external-ui 表示管理面板的路径
external-ui: ui
dns:
 enable: true
 listen: 0.0.0.0:53
 enhanced-mode: redir-host
 nameserver:
   - 114.114.114.114
   - 223.5.5.5
   - 'tls://dns.rubyfish.cn:853'
 fallback:
   - 'tls://1.1.1.1:853'
   - 'tcp://1.1.1.1:53'
   - 'tcp://208.67.222.222:443'
   - 'tls://dns.google'
   - 'tls://dns.rubyfish.cn:853'
# 下面部分则是代理的设置跟规则的设置,这里忽略不写。
Proxy:
...
  1. 做透明代理,必须启用redir-port,也就是clash透明代理的端口
  2. 做网关设备,你就必须得让其他局域网的机器能够连接到clash,所以allow-lan必须打开
  3. 必须打开clash的DNS功能,并且使用redir-host模式,最重要的是你还需要在fallback:后面加上一个支持DoT的DNS。比如我这边是使用的dns.rubyfish.cn:853,如果你用普通的DNS无非解决域名被污染的问题。
设置转发和路由
  1. 开启IP转发功能
    echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf && sysctl -p
    echo "net.ipv6.conf.all.forwarding = 1" >> /etc/sysctl.conf && sysctl -p
  1. 验证内核转发是否开启成功,如果返回1说明开启成功
    cat /proc/sys/net/ipv4/ip_forward
  1. 开启 iptables 的路由
    iptables -t nat -N clash
    iptables -t nat -N clash_dns
    
    iptables -t nat -A PREROUTING -p tcp --dport 53 -d 198.19.0.0/24 -j clash_dns
    iptables -t nat -A PREROUTING -p udp --dport 53 -d 198.19.0.0/24 -j clash_dns
    iptables -t nat -A PREROUTING -p tcp -j clash
    
    # 这里需要注意的是,下面两行最后的 172.16.10.248 是当前旁路由的 IP 地址,请根据你自己的实际情况修改
    # 如果你自己的旁路由 IP 跟下面的 IP 地址不对的话会造成无法翻墙
    iptables -t nat -A clash_dns -p udp --dport 53 -d 198.19.0.0/24 -j DNAT --to-destination 172.16.10.248:53
    iptables -t nat -A clash_dns -p tcp --dport 53 -d 198.19.0.0/24 -j DNAT --to-destination 172.16.10.248:53
    
    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
    
    iptables -t nat -A clash -p tcp ! --dport 22 -j REDIRECT --to-ports 7892
    iptables -t nat -A OUTPUT -p tcp -m owner ! --uid-owner clash -j REDIRECT --to-port 7892
    
    

执行完上面的 iptables 命令之后,就完成了旁路由的路由功能了,但是此时 iptables 并没有永久保存,下次开机上面的配置就会丢失。为了使得重启之后 iptables 命令仍然存在,我们需要安装软件来实现:

sudo yum install iptables-persistent

安装的过程中会提示你是否需要保存 iptables 配置,直接选是就行。这时候即使电脑重启了也会应用这些路由规则。

如果后面你有需要重新修改 iptables 的配置,那么只需要在执行完 iptables 之后再执行:

  sudo iptables-save > /etc/iptables/rules.v4
将clash设置为开机自启

首先创建 clash 服务文件:

sudo vim /etc/systemd/system/clash.service

填入下面的内容:

[Unit]
Description=clash daemon

[Service]
Type=simple
User=clash
ExecStart=/usr/local/bin/clash -d /home/clash/.config/clash/
Restart=on-failure

[Install]
WantedBy=multi-user.target

需要注意的是,上面的 User 以及 ExecStart 需要根据你自身实际情况填写。User 则是表示需要以什么用户启动 clash,通常为非 root 用户。然后 ExecStart 里面 -d 参数后面的路径则是 clash 的配置文件路径。

编辑完成之后重新加载systemd,并设置开机自启

sudo systemctl daemon-reload
sudo systemctl enable clash

once

这个人太懒什么东西都没留下

文章评论(5)

  • Nelli Weber Gregorio

    I am just commenting to let you understand what a nice discovery our girl experienced viewing the blog. She mastered a lot of pieces, including what it is like to possess a wonderful teaching spirit to have most people very easily fully understand specified advanced matters. You actually exceeded her expectations. Many thanks for delivering these valuable, safe, edifying not to mention fun tips about that topic to Julie. Nelli Weber Gregorio

    2020-08-23
  • erotik

    You have noted very interesting details ! ps decent website. Bree Lombard Lustick

    2020-08-26
  • game cheats

    Hello, just wanted to say, I loved this blog post. Jilly Doyle Calvin

    2020-08-31
  • porno

    If you want to use the photo it would also be good to check with the artist beforehand in case it is subject to copyright. Best wishes. Aaren Reggis Sela

    2020-10-24
    • once

      @porno Thanks for reminding

      2020-10-29