Code Monkey home page Code Monkey logo

kms-server's Introduction

KMS Server

  • 支持Windows与Office全系列激活

  • 快速部署,仅需一句命令即可使用

  • 内置各版本KMS密钥,无需自行查询

  • 网页端、命令行下快速检索密钥与说明

  • API接口,检查其他KMS服务器工作状态

使用方法

kms.343.re 为例,在成功部署以后:

  • 在需要KMS服务的地方,填入 kms.343.re 即可激活;

  • 可通过网页或命令行curl获取激活密钥:

# 输出操作说明
shell> curl kms.343.re

# 输出Windows的KMS密钥
shell> curl kms.343.re/win

# 输出Windows Server的KMS密钥
shell> curl kms.343.re/win-server

# 输出Office激活命令
shell> curl kms.343.re/office
  • 可用于测试其他KMS服务器是否正常:
# 端口号可不填,默认为1688
shell> curl kms.343.re/check/kms.dnomd343.top:1688
KMS Server: kms.dnomd343.top (1688) -> available

快速部署

如果您对Linux及容器较为熟悉,可以直接参考以下命令部署;若接触较少,建议阅读后文的详细部署流程

开启完整服务,1688 端口用于KMS激活,1689 端口用于HTTP访问(反向代理):

docker run -d --restart=always --network host dnomd343/kms-server
# 或使用bridge网络
docker run -d --restart=always -p 1688-1689:1688-1689 dnomd343/kms-server

仅开启KMS服务:

docker run -d --restart=always --network host dnomd343/kms-server --disable-http
# 或使用环境变量指定
docker run -d --restart=always --network host --env DISABLE_HTTP=TRUE dnomd343/kms-server

开启DEBUG模式:

docker run -d --restart=always --network host dnomd343/kms-server --debug
# 或使用环境变量指定
docker run -d --restart=always --network host --env DEBUG=TRUE dnomd343/kms-server

使用自定义端口:

docker run -d --restart=always --network host dnomd343/kms-server --kms-port 11688 --http-port 23333
# 或使用环境变量指定
docker run -d --restart=always --network host --env KMS_PORT=11688 --env HTTP_PORT=23333 dnomd343/kms-server

部署流程

1. 防火墙检查

服务器 1688/tcp 端口接受外网KMS激活请求,务必检查是否被防火墙拦截。

如果开启了 ufw 防火墙服务,使用以下命令放行:

shell> ufw allow 1688/tcp
shell> ufw status

如果开启了 firewalld 防火墙服务,使用以下命令放行:

shell> firewall-cmd --zone=public --add-port=1688/tcp --permanent
shell> firewall-cmd --reload
shell> firewall-cmd --list-ports

部分云服务商可能会在网页端控制台提供防火墙服务,请在对应页面开放 1688/tcp 端口。

2. Docker检查

shell> docker --version
···Docker版本信息···

若上述命令未输出版本信息,使用以下命令安装:

shell> sudo curl https://get.docker.com | bash
··· Docker安装信息 ···

3. 启动KMS服务

本项目基于Docker构建,在Docker HubGithub Package可以查看已构建的各版本镜像。

kms-server 同时发布在多个镜像源上(国内网络可使用阿里云仓库加速):

  • Docker Hubdnomd343/kms-server

  • Github Packageghcr.io/dnomd343/kms-server

  • 阿里云镜像registry.cn-shenzhen.aliyuncs.com/dnomd343/kms-server

下述命令中,容器路径可替换为上述其他源

使用以下命令启动KMS服务:

shell> docker run -d --restart=always --network host dnomd343/kms-server

容器使用 1688/tcp1689/tcp 端口,前者用于KMS激活,后者为HTTP服务

容器启动时,添加 --kms-port xxx--http-port xxx 选项可修改以上端口

若仅需KMS激活功能,无需执行后续步骤,本步完成后即可正常使用;同时,建议添加 --disable-http 选项关闭内部HTTP服务,以减少多余的性能占用。

5. 配置反向代理

这一步用于配置反向代理,对外暴露kms-server的HTTP服务

将用于KMS服务的域名DNS解析到当前服务器,配置反向代理到本机 1689/tcp 端口,以Nginx为例:

# 进入nginx配置目录
shell> cd /etc/nginx/conf.d

# 添加反向代理配置
shell> vim kms.conf

配置文件如下,按备注修改域名与证书:

server {
    listen 80;
    listen [::]:80;
    server_name kms.343.re;  # 改为自己的KMS域名

    location / {
        if ($http_user_agent !~* (curl|wget)) {  # 来自非命令行的请求,重定向到https
            return 301 https://$server_name$request_uri;
        }
        proxy_set_header X-Real-IP $remote_addr;  # 反向代理转发真实IP
        proxy_set_header Host $http_host;  # 反向代理转发当前域名
        proxy_pass http://127.0.0.1:1689;
    }
}

server {
    listen 443 ssl http2;
    listen [::]:443 ssl http2;
    server_name kms.343.re;  # 改为自己的KMS域名
    ssl_certificate /etc/ssl/certs/343.re/fullchain.pem;  # 改为自己的TLS证书文件
    ssl_certificate_key /etc/ssl/certs/343.re/privkey.pem;  # 改为自己的TLS私钥文件

    gzip on;  # 可选,开启gzip压缩,提高加载速度
    gzip_buffers 32 4K;
    gzip_comp_level 6;
    gzip_min_length 100;
    gzip_types application/javascript text/css text/xml;
    gzip_disable "MSIE [1-6]\.";
    gzip_vary on;

    location / {
        proxy_set_header X-Real-IP $remote_addr;  # 反向代理转发真实IP
        proxy_set_header Host $http_host;  # 反向代理转发当前域名
        proxy_pass http://127.0.0.1:1689;
    }
}

重启Nginx服务

shell> nginx -s reload

访问KMS服务域名,页面正常显示即反向代理成功。

6. 检查服务是否正常

检查部署的KMS服务器是否正常,例如检测新搭建的服务器 kms.dnomd343.top ,执行以下命令:

shell> curl kms.343.re/check/kms.dnomd343.top
KMS Server: kms.dnomd343.top (1688) -> available

输出 available 即工作正常,若失败请检查防火墙是否屏蔽1688端口。

开发相关

运行参数

  • --debug :进入DEBUG模式,输出调试日志

  • --kms-port :指定KMS激活端口,默认值为 1688

  • --http-port :指定HTTP服务端口,默认值为 1689

  • --disable-http :禁用HTTP服务,默认值为 false

  • -v--version :显示版本信息并退出

  • -h--help :显示帮助信息并退出

环境变量

  • DEBUG :值为 true 时,进入DEBUG模式

  • KMS_PORT :指定KMS激活端口,默认值为 1688

  • HTTP_PORT :指定HTTP服务端口,默认值为 1689

  • DISABLE_HTTP :值为 true 时,禁用HTTP服务

JSON接口

kms-server 预留了以下JSON接口,用于输出内置的KMS密钥。

  • /json:输出全部KMS密钥;

  • /win/json:输出各版本Windows的KMS密钥;

  • /win-server/json:输出各版本Windows Server的KMS密钥;

KMS测试

kms-server 内置了检测其他KMS服务器是否可用的功能,接口位于 /check 下,使用以下参数:

  • host:目标服务器IPv4、IPv6地址或域名

  • port:目标服务端口,可选,默认值为 1688

shell> curl -sL "https://kms.343.re/check?host=8.210.148.24" | jq .
{
  "success": true,
  "available": true,
  "host": "8.210.148.24",
  "port": 1688,
  "message": "kms server available"
}

shell> curl -sL "https://kms.343.re/check?host=kms.dnomd343.top&port=8861" | jq .
{
  "success": true,
  "available": false,
  "host": "kms.dnomd343.top",
  "port": 8861,
  "message": "kms server connect failed"
}

容器构建

本地构建

shell> git clone https://github.com/dnomd343/kms-server.git
shell> cd ./kms-server/
shell> docker build -t kms-server .

交叉构建

shell> docker buildx build -t dnomd343/kms-server --platform="linux/amd64,linux/arm64,linux/386,linux/arm/v7" https://github.com/dnomd343/kms-server.git --push

许可证

MIT ©2021 @dnomd343

kms-server's People

Contributors

dnomd343 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar

kms-server's Issues

adding more info to container logs

hello,
in order to get more info on for which software ePID is sent you can add one more step to dockerfile in order to get vlmcsd.kmd file.

2021-08-04 18:55:22: Sending ePID (randomized at program start): 55041-00206-682-152527-03-1061-6002.0000-0282019,
2021-08-04 18:55:22: KMS v6.0 request from T-----1 for Office Professional Plus 2019

FROM alpine as iconv
COPY ./conf/docker/iconv.sh /
RUN sh /iconv.sh

FROM alpine as vlmcsd
COPY ./conf/docker/vlmcsd.sh /
RUN apk --update add --no-cache curl wget && \
    sh /vlmcsd.sh

FROM alpine as vlmcsdinfo
WORKDIR /
RUN apk --update add --no-cache curl wget git && \
    git clone https://github.com/Wind4/vlmcsd/

FROM alpine
LABEL maintainer="dnomd343"
COPY . /var/www/kms-server
COPY --from=iconv /tmp/iconv/ /usr/local/lib/
COPY --from=vlmcsd /tmp/vlmcsd/vlmcsd /usr/bin/vlmcsd
COPY --from=vlmcsdinfo /vlmcsd/etc/vlmcsd.kmd /usr/bin/vlmcsd.kmd
RUN apk --update add --no-cache nginx curl php7 php7-fpm php7-json php7-iconv php7-sqlite3 && \
    rm /usr/lib/php7/modules/iconv.so && ln -s /usr/local/lib/iconv.so /usr/lib/php7/modules/ && \
    mv /usr/local/lib/libiconv.so /usr/local/lib/libiconv.so.2 && \
    mkdir -p /run/nginx && touch /run/nginx/nginx.pid && \
    cp /var/www/kms-server/conf/docker/init.sh / && \
    cp /var/www/kms-server/conf/docker/kms.conf /etc/nginx/kms.conf && \
    cp -f /var/www/kms-server/conf/docker/nginx.conf /etc/nginx/nginx.conf && \
    cp /var/www/kms-server/conf/docker/init.sh /
EXPOSE 1688 1689
CMD ["sh","init.sh"]

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.