一个灵活的代理解决方案,可以让整个内网自动科学上网,配置简单方便,为企业级网络设计,也适用于家庭。
适用人群
- 企业用户
企业内部,统一配置,实现部分部门或者整个内网科学上网/或部分服务使用代理访问。 - 家庭用户
通过在路由器或者现有的 NAS、树莓派、小型工控机等方式部署,实现内网所有设备,包括电视,电视盒子,游戏主机,手机等科学上网,或设置加速通道。 - 海外用户
少量需要长期配置代理来访问限制资源的用户。 - 其他
同时需要使用多个代理分流的用户,例如:使用不同的代理,访问 netflix, 访问 google,telegram,游戏加速等。
预览
web 管理界面,灵活设置规则,即时生效,无需重启服务。
管理界面登录 代理配置 规则配置
网络拓扑
安装
仅单个可执行文件,解压即用。
-rw-r--r-- 1 clachlan978 staff 210B Dec 1 00:30 config.example.json
-rwxr-xr-x 1 clachlan978 staff 16M Dec 1 00:30 kungfu
drwxr-x--- 2 clachlan978 staff 64B Dec 1 00:30 logs
配置
仅一个配置文件,参考
config.example.json
,重命名为 config.json
{
"network": "10.86.0.1/16",
"manage": {
"address": "0.0.0.0:3001",
"auth": {
"admin": "123456"
}
}
}
network 表示经过劫持的 DNS 使用该网段
manage: 管理界面设置
address: 为管理功能绑定的ip和端口号
auth: admin 为用户名,123456 为密码 (支持配置多个用户)
manage: 管理界面设置
address: 为管理功能绑定的ip和端口号
auth: admin 为用户名,123456 为密码 (支持配置多个用户)
日志
日志配置可选,会消耗一定的磁盘,开启记录日志,有助于排查问题。
配置文件范例
案例/使用
企业内网服务器
环境:
- 一台服务器,可以是虚拟机,Linux 2.2.x 以上内核 配置 4CPU 512M 以上内存, 100M 以上网卡
(条件允许,建议使用更高配置,使用千兆网络) - 编辑
/etc/sysctl.conf
, 设置net.ipv4.ip_forward = 1
启用转发。 - 下载 KungFu linux 版本,修改 config.json 文件,并启动(需要 root 权限)。
- 修改路由器(或者3层交换)添加静态路由表,路由设置参考
config.json
文件中的配置。 - 修改内网 DHCP 服务器,设置下发 DNS 为上述部署 KungFu 的服务。
- 内网电脑,重连网络,检查 DHCP 是否生效
- 网络测试,尝试
ping google.com
是否已通
如果看到返回是和
config.json
中配置的网段一致,表示配置正确。~# ping google.com
PING google.com (10.172.0.21) 56(84) bytes of data.
64 bytes from google.com (10.172.0.21): icmp_seq=1 ttl=60 time=0.306 ms
64 bytes from google.com (10.172.0.21): icmp_seq=2 ttl=60 time=0.229 ms
64 bytes from google.com (10.172.0.21): icmp_seq=3 ttl=60 time=0.323 ms
64 bytes from google.com (10.172.0.21): icmp_seq=4 ttl=60 time=0.323 ms
64 bytes from google.com (10.172.0.21): icmp_seq=5 ttl=60 time=0.324 ms
^C
--- google.com ping statistics ---
5 packets transmitted, 5 received, 0% packet loss, time 4098ms
rtt min/avg/max/mdev = 0.229/0.301/0.324/0.036 ms
~# traceroute google.com
traceroute to google.com (10.172.0.21), 30 hops max, 60 byte packets
1 192.168.8.1 (192.168.8.1) 6.753 ms 7.655 ms 8.602 ms
2 192.168.4.10 (192.168.4.10) 0.177 ms 0.162 ms 0.147 ms
3 google.com (10.172.0.21) 0.202 ms 0.217 ms 0.236 ms
后续配置:合理划分 vlan,添加服务负载。
梅林系统(路由器)
实验环境:
- 华硕 RT-AC68U
- 固件 Merlin 384.5
步骤:
- 启用 jffs 脚本
- 启用 tun 设备, 修改
/jffs/scripts/init-start
文件,添加一行/sbin/modprobe tun
- 关闭内置的 DNS 服务,但保留 DHCP 修改
/jffs/configs/dnsmasq.conf.add
,添加一行port=0
- 挂载一个移动硬盘或者 U 盘 KungFu Pro 使用了存储,默认的 jffs2 文件系统不支持
- 将 KungFu Pro 拷贝到挂载的存储里,修改配置文件,然后启动即可
后续:设置开机启动,修改/jffs/configs/post-mount
添加启动 KungFu Pro 脚本(命令)
树莓派
同时适用于其他类似 ARM 架构开发板, 如 arduino,香蕉派,香橙派等
前提:
需要路由器支持添加静态路由表。基本上几十块钱的 TP-Link 路由器都支持。
安装步骤请参考 “企业内网服务器”,选择下载 arm 平台软件包。
ubnt EdgeRouter™ X
ubnt ER-X 路由器是基于 linux mips 架构,有不少家庭用户在弱电箱选择安装了该路由器。
- 设置路由器,开启 dnsmasq
- 设置 dnsmasq 添加 option
port=0
关闭路由器内置的 DNS server - sftp 或 scp 上传
kungfu-vx.x.x.linux-mipsle.tar.gz
(目录随意,可以放 ubnt 家目录: /home/ubnt) - 解压,修改 config.json, 然后
sudo ./kungfu
启动服务 - 添加自动启动脚本,放到
/config/scripts/post-config.d/
目录,注意脚本需要有可执行权限
ubnt 其他系列是否支持,我们暂时没有测试。
Docker
你可也可以使用 docker 运行,镜像很小,大约 20M
- 创建 config.json (参考前面的配置), 下一步将当前目录映射到容器的 /data 文件夹内,需要有配置文件。
- 运行 (确保宿主机的 udp 53 端口,和 tcp 的管理端口没有被占用)
docker run --privileged \ --restart unless-stopped \ --net=host --name kungfu \ -v $(pwd):/data -d clachlan978/kungfu
注意: kungfu 要使用 53 端口,并且创建 tun 设备, 需要用特权模式。 - 修改路由器,增加路由规则,下一跳到容器宿主机
故障排除
- 网络故障,不通,建议 tcpdump 抓包看看,是否数据包已抵达 Kung Fu Pro 所在服务器。
- 如何定位正在使用那个代理?
通过 dns 反查, 查看返回的 TXT 信息定位,到底走了哪个代理出去~# dig -x 10.172.0.21 ; <<>> DiG 9.11.3-1ubuntu1.2-Ubuntu <<>> -x 10.172.0.21 ;; global options: +cmd ;; Got answer: ;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 60044 ;; flags: qr rd ra; QUERY: 1, ANSWER: 1, AUTHORITY: 0, ADDITIONAL: 1 ;; QUESTION SECTION: ;21.0.172.10.in-addr.arpa. IN PTR ;; ANSWER SECTION: 21.0.172.10.in-addr.arpa. 60 IN PTR google.com. ;; ADDITIONAL SECTION: google.com. 10 IN TXT "groupId:1, groupName:gfw, ruleId:1, ruleType:2, ruleValue:google, proxyId:4, proxyName:HkRackspaceSS" ;; Query time: 0 msec ;; SERVER: 10.172.0.1#53(10.172.0.1) ;; WHEN: Sat Dec 08 14:43:35 CST 2018 ;; MSG SIZE rcvd: 214
License
这并不是一个完全免费的工具。 再次声明,本工具主要解决的痛点是代理的"最后一公里" -- 内网。 主要推荐在团队或者企业内部使用。
价格方案
使用自愿捐赠方案,价格 100元/年起,没有上限, 具体请加入 telegram 群组获取最新的捐赠付款码。
下载 & 更新
Tips: 点击 github 上的 watch 关注,即可获得更新通知。
升级
- 停止服务
- 备份
kungfu.db
- 下载最新版本的程序覆盖
Docker 用户
- 停止服务
docker stop kungfu
- 备份
kungfu.db
- 删除旧版本容器
docker rm kungfu
- 拉取最新版本镜像并启动(参考 使用 Docker)
Beta License:
H4sIAAAAAAAA/wCgAV/+X9Oq/1keziSqoOWOhr/zloumAYuHsQfdJkro8My39NhoqNlXoFhbdyQgeAVxsMIzzjjuSUoX88TMUmN/EqGLkbGZEtssc3G3NLaTHDuhPDXNXB6VefSpAi2+mVdP3rfD3PGh+dYBLPAjJkiVzEIqzTX0jZi79K0tZzq+D6xBwCkOwTk6qk3HZzhKkwPU6n6CvOT6aBnHA20254QLXDfUbzhEHeMnWFlkgTdbsz8eGAQmyBE5vWcAeFC3P6qqRFHepgm1W2bg86BTlNn8SiTl2yhez7Z1+zoxJT2/fl9A23hHF/zo3xu/+SK1DTctvY7gykfkNCJIMnmkY9yx/vcWIlRGk5boZI9WZ6m/0fEJ9OqvKTsyvuJUpndDNKuD6SXNH3qii/P0qp3z/pi5GHynd9bIOWwJVpIbkNBL5Il3vbCpXmk+1sWkYmH2HqCA4D8WfTk0Z7gG1vrjRAdlIxHXDneBH1SJ+UBZStx1cQd31h1i1EjevisaPckQkTXgkEDEP7ORRcWW2LuiZTNFILqeSgtPt04IL9VXjHgw7x2Fef8BAAD//56g5GSgAQAAX01ea
License type : Beta
Max rules : 500
Issue to : Potential users
Expire : 2019-11-06 14:03:11
Issue time : 2019-04-20 14:03:11
沟通
Telegram: https://t.me/kungfupro
FAQ
- 是否支持 UDP relay,如何确认我的配置已经工作良好?目前仅 shadowsocks 代理协议支持 udp 转发(并且依赖服务端开启 udp relay)。 你可以通过向 google 公共 DNS 服务器查询(注意,要用域名)任意域名的 A 记录。 来确认 KungFu 的 UDP relay 是工作的。
例如执行dig @google-public-dns-a.google.com google.com
,如果工作正常,返回结果应该和你直接在代理服务器上执行的效果一致。 - 如何应对 DNS 污染?不需要额外处理,你只用关心规则的维护,符合规则的请求会自动规避 DNS 污染问题.
- ---------------------------------
No comments:
Post a Comment