ESXI & Alpine & Clash Premium 旁路网关

2021-03-20 3123点热度 6人点赞 4条评论

上一篇博客写了使用Alpine与Clash搭建的过程,但这种方式实在太繁琐,例如Iptables,管理面板,经过几天的使用才发现Clash有一个Premium版本,它支持TUN模式。

对于不遵循系统代理的软件,TUN 模式可以接管其流量并交由 CFW 处理,在 Windows 中,TUN 模式性能比 TAP 模式好。

TUN与TAP

在计算机网络中,TUN与TAP是操作系统内核中的虚拟网络设备。不同于普通靠硬件网络适配器实现的设备,这些虚拟的网络设备全部用软件实现,并向运行于操作系统上的软件提供与硬件的网络设备完全相同的功能。

TAP等同于一个以太网设备,它操作第二层数据包如以太网数据帧。

TUN模拟了网络层设备,操作第三层数据包比如IP数据包。

操作系统通过TUN/TAP设备向绑定该设备的用户空间的程序发送数据,反之,用户空间的程序也可以像操作硬件网络设备那样,通过TUN/TAP设备发送数据。在后种情况下,TUN/TAP设备向操作系统的网络栈投递(或“注入”)数据包,从而模拟从外部接受数据的过程。

这里由于家里买了一个外贸的盒子(hk1 box android s905x3双频蓝牙 安卓电视盒),我又想用它观看全部的内容,所以就想让这台设备单独可以使用该功能。

这篇博文只记录核心部分,大部分的过程还是沿用之前文章。 ESXi install Alpine & Clash Proxy

开启TUN模式

开启TUN模式只需要在config.yaml中增加以下配置即,经求证,Clash在Linux下目前没有自动获取 interface-name 的功能,所以需要手动指定interface-name。

interface-name: eth0

tun:
  enable: true
  stack: system # or gvisor
  #dns-hijack:
  #  - 8.8.8.8:53
  #  - tcp://8.8.8.8:53
  auto-route: true # auto set global route
  auto-detect-interface: true # conflict with interface-name

wiki:https://github.com/Dreamacro/clash/wiki/premium-core-features

Alpine 默认是没有启用tun功能的,所以需要自行开启

sudo modprobe tun
sudo echo "tun" >>/etc/modules

# 检查是否生效
lsmod | grep tun

Clash Premium 部署

Premium Release 版本可以在这里下载:https://github.com/Dreamacro/clash/releases/tag/premium

wget https://github.com/Dreamacro/clash/releases/download/premium/clash-linux-amd64-2021.03.10.gz

gzip -d clash-linux-amd64-2021.03.10.gz
mv clash-linux-amd64-2021.03.10 /usr/bin/clash
chmod +x /usr/bin/clash

# 测试配置文件
clash -d .config/clash/ -t

配置文件示例

# 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
experimental:
  ignore-resolve-fail: true
# RESTful API 的口令
secret: '' 

# 您可以将静态网页资源(如 clash-dashboard)放置在一个目录中,clash 将会服务于 `RESTful API/ui`
# 参数应填写配置目录的相对路径或绝对路径。
# external-ui: './dashboard'

dns:
  enable: true # set true to enable dns (default is false)
  ipv6: false # default is false
  listen: 0.0.0.0:53
  enhanced-mode: redir-host # or fake-ip
  fake-ip-range: 198.18.0.1/16 # if you don't know what it is, don't change it
  nameserver:
     - https://doh.pub/dns-query
     - https://dns.alidns.com/dns-query
     - https://i.233py.com/dns-query
  fallback:
     - https://cloudflare-dns.com/dns-query
     - https://doh.opendns.com/dns-query
     - https://dns.google/dns-query
     - https://dns.nextdns.io/dns-query
     - https://doh.233py.com/dns-query

interface-name: eth0

tun:
  enable: true
  stack: system
  dns-hijack:
    - 8.8.8.8:53
    - tcp://8.8.8.8:53
  auto-route: true # auto set global route

proxies:
...

管理面板

可以只用使用http://yacd.haishan.me/来进行管理。

端口转发

前面的所有步骤做完之后我们就需要将客户机的溜了转发到这个服务器上。

# 创建用于clash的NAT 
iptables -t nat -N clash  
iptables -t nat -N clash_dns 

# 转发DNS请求到clash_dns链
iptables -t nat -A PREROUTING -p tcp --dport 53 -j clash_dns 
iptables -t nat -A PREROUTING -p udp --dport 53 -j clash_dns 

# 转发tcp请求到clash链
iptables -t nat -A PREROUTING -p tcp -j clash 

# 转发dns请求到网关 
iptables -t nat -A clash_dns -p udp --dport 53 -j DNAT --to-destination 10.0.0.200:53
iptables -t nat -A clash_dns -p tcp --dport 53 -j DNAT --to-destination 10.0.0.200: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 

# 转发流量至7892端口
iptables -t nat -A clash -p tcp -j REDIRECT --to-ports 7892

# 保存规则 
rc-service iptables save

# 查看nat规则
iptables -t nat -L -n --line-numbers

使用

这里以家里的电视为准,主路由使用的是爱快。

IP分组

结语

方式有很多种,若还有更好的方法,欢迎留言讨论~

Jalena

原创内容,转载请注明出处! 部分内容来自网络,请遵守法律适用!

文章评论

  • Michael

    你好,有个疑问请教下。这篇文章开头写了你之前那篇文章【ESXi install Alpine & Clash Proxy】太繁琐,让我感觉使用这边文章介绍的Premium版本tun模式就会简单很多。但是为什么看完之后感觉跟前面那篇差不多的步骤,区别只是在clash的配置中增加了tun的部分,求解惑。另外就是如果按上篇文章的设置,你的电视盒子也能达到同样的目的吧?

    2021-08-07
    • Jalena

      @Michael clash和clash Premium版本的区别就在于Premium版本支持tun,所以前面的步骤基本就类似了

      2021-08-08
  • chengzzz

    你好。若使用电脑时网络该如何填写呢?是否为:
    IP:10.0.0.1XX //10.0.0.0/24网段内
    子网掩码:255.255.255.0
    网关:10.0.0.200 //clash服务器地址
    DNS:198.18.0.1 //fake-ip

    望回复,谢谢

    2021-05-05
    • Jalena

      @chengzzz 如果你是本机使用的话,你可以使用 Clash for Windows 客户端。 https://github.com/Fndroid/clash_for_windows_pkg/releases

      若是以我博客这种网关形式运行的话,IP地址,子网掩码都以路由器的DHCP设置为准,唯独将网关地址设置为这个Clash服务所在的IP主机上即可。(目的就是让你的请求从这个线路走)

      2021-05-06