# iKuai + ubuntu 虚拟机 + 下一跳网关 + clash 实现旁路由(透明网关)魔法上网

过去使用得方案是 iKuai + docker + gost + openvpn + 端口分流(外部线路)实现魔法上网,灵活度不足,很大程度上是因为限于国情爱快固件比较缩手缩脚。近期由于上游服务器调整,原方案无法继续使用了。折腾了一下新方案,新方案的网络拓扑图如下:

图片使用 https://draw.io 绘制

说明:

  • LAN1 走默认路由表,国内线路
  • LAN2 走下一跳网关方式进行分流,魔法上网
  • AP 分为 3 个模式:
    • lan1 国内直连
    • vlan 100 跨境
    • vlan 200 访客模式 (限速)

准备

  • iKuai 3.6.7 x64 Build202208301257 免费版 (8G/64G)
  • ubuntu 原生服务端镜像:ubuntu-20.04.3-live-server-amd64.iso
  • clash v1.11.8
  • shadowsocks + v2ray-plugin 的服务器(可选,机场或其他自建服务器,clash 大多都支持,配置需做相应调整)

配置

iKuai 安装 Ubuntu 虚拟机

  1. 创建普通存储的硬盘
  2. 上传iso文件
  3. 创建虚拟机
    • 创建磁盘文件
    • 加载ubuntu server iso文件 (iso 文件上传路径)
    • 开机自启
  4. 启动虚拟机,打开网页 vnc 进行 ubuntu server 默认安装
  5. 安装完成,关机,删除挂载的 iso 文件
  6. 重新启动安装完毕

image-20220906141159448

image-20220906141310079

更多可参考:https://www.77bx.com/79.html

Ubuntu 预配置

禁用 systemd-resolved

指定一个默认 DNS,223.5.5.5 是阿里云公共 DNS,也可换成其他的。极度不推荐 114 DNS,污染严重。

sudo su
[ -d /etc/systemd/resolved.conf.d ] || mkdir -p /etc/systemd/resolved.conf.d
printf "%s\n%s\n%s\n" '[Resolve]' 'DNS=223.5.5.5' 'DNSStubListener=no' | sudo tee /etc/systemd/resolved.conf.d/10-make-dns-work.conf
systemctl restart systemd-resolved

创建 clash 用户

sudo adduser clash

安装 clash

准备安装包,目录结构如下

> tree
package
├── clash_iptables.sh
├── clash-linux-amd64
├── clash.yaml
└── install.sh

install.sh

#!/bin/bash


systemctl stop clash

cp clash-linux-amd64 /usr/local/sbin/clash
chmod +x /usr/local/sbin/clash

mkdir -p /etc/clash
cp clash.yaml /etc/clash/config.yaml
cp clash_iptables.sh /etc/clash/
chmod +x /etc/clash/clash_iptables.sh

cat << 'EOF' > /lib/systemd/system/clash.service
[Unit]
Description=clash service
After=network.target

[Service]
Type=simple
StandardError=journal
User=clash
Group=clash
CapabilityBoundingSet=CAP_NET_BIND_SERVICE CAP_NET_ADMIN
AmbientCapabilities=CAP_NET_BIND_SERVICE CAP_NET_ADMIN
ExecStartPre=+/usr/bin/bash /etc/clash/clash_iptables.sh
ExecStart=/usr/local/sbin/clash -d /etc/clash
LimitNPROC=500
LimitNOFILE=1000000
Restart=always
RestartSec=5s

[Install]
WantedBy=multi-user.target
EOF

systemctl daemon-reload
systemctl restart clash

clash.yaml

mixed-port: 7890
tproxy-port: 7893
ipv6: false
allow-lan: true
mode: rule
log-level: debug
secret: ''

dns:
  enable: true
  ipv6: false
  listen: 0.0.0.0:53
  enhanced-mode: fake-ip
  fake-ip-range: 198.18.0.1/16
  default-nameserver:
    - 223.5.5.5
    - 8.8.8.8
  nameserver:
    - 223.5.5.5
    - 8.8.8.8
    - https://doh.pub/dns-query
    - https://dns.alidns.com/dns-query
    - tls://dns.rubyfish.cn:853 # DNS over TLS
    - https://1.1.1.1/dns-query # DNS over HTTPS
  fallback:
    - tls://1.1.1.1:853
    - tls://1.0.0.1:853
    - tls://8.8.8.8:853
  fallback-filter:
    geoip: true
    geoip-code: CN
    ipcidr:
      - 240.0.0.0/4
    domain:
      - '+.google.com'
      - '+.facebook.com'
      - '+.youtube.com'

proxies:
  - name: "ss01"
    type: ss
    server: "ss01.example.com"
    port: 443
    cipher: aes-256-gcm
    password: "password"
    plugin: v2ray-plugin
    plugin-opts:
      mode: websocket
      tls: true
      # skip-cert-verify: true
      host: ss01.example.com
      path: "/customized_wss_path"
      mux: true
      # headers:
      #   custom: value

proxy-groups:
  - name: "auto"
    type: url-test
    proxies:
      - ss01
    # tolerance: 150
    # lazy: true
    url: 'http://www.gstatic.com/generate_204'
    interval: 300
  - name: "PROXY"
    type: select
    proxies:
      - "auto"
rules:
# LAN
  - IP-CIDR,127.0.0.0/8,DIRECT
  - IP-CIDR,172.16.0.0/12,DIRECT
  - IP-CIDR,192.168.0.0/16,DIRECT
  - IP-CIDR,10.0.0.0/8,DIRECT
  - IP-CIDR,100.64.0.0/10,DIRECT

# 最终规则(除了中国区的IP之外的,全部翻墙)
  - GEOIP,CN,DIRECT
  - MATCH,PROXY

clash_iptables.sh

#!/bin/bash

# 参考:
# https://www.gushiciku.cn/pl/aYvT/zh-hk

# delete possible configuration
ip rule del fwmark 666 table 666 || true
ip route del local 0.0.0.0/0 dev lo table 666 || true

iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X clash || true
iptables -t mangle -X clash_local || true

# recreate iptables
ip rule add fwmark 666 lookup 666
ip route add local 0.0.0.0/0 dev lo table 666
iptables -t mangle -N clash
iptables -t mangle -A clash -d 0.0.0.0/8 -j RETURN
iptables -t mangle -A clash -d 127.0.0.0/8 -j RETURN
iptables -t mangle -A clash -d 10.0.0.0/8 -j RETURN
iptables -t mangle -A clash -d 172.16.0.0/12 -j RETURN
iptables -t mangle -A clash -d 192.168.0.0/16 -j RETURN
iptables -t mangle -A clash -d 169.254.0.0/16 -j RETURN
iptables -t mangle -A clash -d 224.0.0.0/4 -j RETURN
iptables -t mangle -A clash -d 240.0.0.0/4 -j RETURN
iptables -t mangle -A clash -p tcp -j TPROXY --on-port 7893 --tproxy-mark 666
iptables -t mangle -A clash -p udp -j TPROXY --on-port 7893 --tproxy-mark 666
iptables -t mangle -A PREROUTING -j clash
iptables -t mangle -N clash_local
iptables -t mangle -A clash_local -d 0.0.0.0/8 -j RETURN
iptables -t mangle -A clash_local -d 127.0.0.0/8 -j RETURN
iptables -t mangle -A clash_local -d 10.0.0.0/8 -j RETURN
iptables -t mangle -A clash_local -d 172.16.0.0/12 -j RETURN
iptables -t mangle -A clash_local -d 192.168.0.0/16 -j RETURN
iptables -t mangle -A clash_local -d 169.254.0.0/16 -j RETURN
iptables -t mangle -A clash_local -d 224.0.0.0/4 -j RETURN
iptables -t mangle -A clash_local -d 240.0.0.0/4 -j RETURN
iptables -t mangle -A clash_local -p tcp -j MARK --set-mark 666
iptables -t mangle -A clash_local -p udp -j MARK --set-mark 666
iptables -t mangle -A OUTPUT -p tcp -m owner --uid-owner clash -j RETURN
iptables -t mangle -A OUTPUT -p udp -m owner --uid-owner clash -j RETURN
iptables -t mangle -A OUTPUT -j clash_local

clash-linux-amd64

本文采用 amd64-v1.11.8版本

https://github.com/Dreamacro/clash/releases/download/v1.11.8/clash-linux-amd64-v1.11.8.gz

新架构或可采用 amd64-v3 版本:

https://github.com/Dreamacro/clash/releases/download/v1.11.8/clash-linux-amd64-v1.11.8.gz

更多关于 v3 版本的介绍(指令集层面的区别):https://github.com/golang/go/wiki/MinimumRequirements#amd64

本地上传软件包至虚拟机:

scp -r package root@10.35.0.16:~

虚拟机内执行安装程序:

cd ~/pacakge
sudo ./install.sh

iKuai 设置

iKuai 路由器硬件配置

iKuai 配置最小要求 :64位系统、4GB RAM、20GB SSD

image-20220906133103187

分流设置, 开启下一跳网关分流

image-20220906141456292

VLAN 设置

image-20220906141922969

DHCP 配置

image-20220906144039268

一些思考

  • clash TPROXY 模式的支持使得全局代理变得很方便,可以突破路由器的限制实现复杂功能
  • clash 不支持 icmp 代理,将使得icmp失效,考虑如何解决
  • clash 的 fake-ip 有点儿意思,还不能完全理解,

参考

https://www.gushiciku.cn/pl/aYvT/zh-hk

https://gist.github.com/cloverstd/0c3da3191797e8837cf86e5791404e55

https://blog.newhanly.com/2020/04/28/clash/

https://github.com/Hackl0us/SS-Rule-Snippet

https://www.v2ex.com/t/761903

https://www.bilibili.com/read/cv14088928/

发表于: 作者:JiapengLi
由于某种不存在的原因,评论区正在努力加载中……