长风clash
是一款主打透明网关功能的 clash
客户端,目的是给家里所有设备都能享用clash
带来的便利,如ios
、android TV
或者不想安装客户端的设备都可以,只需要简单几行命令就可以完成透明网关
的搭建~ 可以运行在 arm,x64设备上,如树莓派
、虚拟机
、docker
。下面主要介绍如何在 Docker
下使用
目前透明网关功能只支持在 linux 环境运行
拉取镜像
Docker 镜像已经发布在 Docker hub
使用命令 docker pull changfeng2021/cf-clash:latest
Host模式
比较简单的是使用 host
模式,也就是与主机共享网络环境,使用命令就可以完成安装
docker run -d --restart always --name cf-clash --net=host --privileged changfeng2021/cf-clash:latest
--restart always -> 当宿主机重启容器会自动重启
--net=host -> 网络与宿主机共享
--privileged -> 容器有完全的权限
这是第一种方法运行完成后打开浏览器访问:http://宿主机地址:8443 就可以访问 cf-clash
然后把手机等设备的网关与DNS设置成宿主机IP
值得注意的是这种模式下宿主机需要设置成
静态IP
,否则在路由下设置网关与DNS后会出现问题
Bridge模式
这种方式使用桥接网卡
的方式,安装完成后也不需要设置静态IP
创建
macvlan
网卡docker network create -d macvlan --subnet=192.168.31.0/24 --gateway=192.168.31.1 -o parent=eth0 macnet
注意这里的网段需要和你自己的网段一致,不要照抄,如你的网段是 192.168.1.x 那么 --subnet=192.168.1.0/24
运行创建的网卡运行容器
docker run --name cf-clash -d --network macnet --privileged changfeng2021/cf-clash:latest
查看 docker 容器的IP,我们需要进入到容器内部查看容器 IP,先查看容器
docker ps
,然后根据容器ID进入容器docker exec -it c1b4b62b3c0d bash
➜ ~ docker ps
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
c1b4b62b3c0d changfeng2021/cf-clash:latest "java -jar /opt/app/…" 33 minutes ago Up 33 minutes cf-clashdocker exec -it c1b4b62b3c0d bash
这样我们就进入到容器内部了,再使用
ip addr
可以查看ip地址
root@c1b4b62b3c0d:/# ip addr
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000
link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
inet 127.0.0.1/8 scope host lo
valid_lft forever preferred_lft forever
4: eth0@if2: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default
link/ether 02:42:c0:a8:1f:02 brd ff:ff:ff:ff:ff:ff link-netnsid 0
inet 192.168.31.2/24 brd 192.168.31.255 scope global eth0
valid_lft forever preferred_lft forever这里可以看到
ip
是192.168.31.2
在github的issue下留言了,如果方便希望能解答一下,谢谢
回复删除Bridge模式创建的,最后macnet的ip在路由器上看不见,但已经可以访问了,为什么呢?
回复删除报错了,奇怪 了,用的docker版本:
回复删除time="2023-07-13T10:13:13Z" level=debug msg="[IPTABLES] iptables -t mangle -A clash_prerouting -p tcp -j TPROXY --on-port 9891 --tproxy-mark 0x2d0/0x2d0"
time="2023-07-13T10:13:13Z" level=warning msg="[IPTABLES] exec cmd: exit status 2, iptables v1.8.4 (legacy): unknown option \"--on-port\"\nTry `iptables -h' or 'iptables --help' for more information.\n"
time="2023-07-13T10:13:13Z" level=debug msg="[IPTABLES] iptables -t mangle -A clash_prerouting -p udp -j TPROXY --on-port 9891 --tproxy-mark 0x2d0/0x2d0"
time="2023-07-13T10:13:13Z" level=warning msg="[IPTABLES] exec cmd: exit status 2, iptables v1.8.4 (legacy): unknown option \"--on-port\"\nTry `iptables -h' or 'iptables --help' for more information.\n"