From bbb35d21385fd58571a3bbbb856a03073ca622ea Mon Sep 17 00:00:00 2001 From: jonny <475634114@qq.com> Date: Tue, 30 Mar 2021 15:47:40 +0800 Subject: [PATCH 1/5] Create docker_entrypoint.sh --- docker/docker_entrypoint.sh | 41 +++++++++++++++++++++++++++++++++++++ 1 file changed, 41 insertions(+) create mode 100644 docker/docker_entrypoint.sh diff --git a/docker/docker_entrypoint.sh b/docker/docker_entrypoint.sh new file mode 100644 index 0000000..1ddfe54 --- /dev/null +++ b/docker/docker_entrypoint.sh @@ -0,0 +1,41 @@ +#!/bin/sh +USER="admin" +MM=$(pwgen -1s) +CREATE_USER=1 +CONFIG_FILE='/app/conf/server.toml' + +if [ $CREATE_USER -eq 1 ]; then + if [ ! -e $CREATE_USER ]; then + MM=$(pwgen -1s) + touch $CREATE_USER + bash /app/generate-certs.sh + cd /app/conf/ && cp *.crt /usr/local/share/ca-certificates/ + update-ca-certificates --fresh + userpass=$(/app/anylink -passwd "${MM}"| cut -d : -f2) + echo "${userpass}" + jwttoken=$(/app/anylink -secret | cut -d : -f2) + echo "-- First container startup --user:${USER} pwd:${MM}" + sed -i "s/admin/${USER}/g" /app/server-example.toml + sed -i "s/123456/${MM}/g" /app/server-example.toml + sed -i "s#usertoken#${userpass}#g" /app/server-example.toml + sed -i "s/jwttoken/${jwttoken}/g" /app/server-example.toml + else + echo "-- Not first container startup --" + fi + +else + echo "user switch not create" + +fi + +if [ ! -f $CONFIG_FILE ]; then +echo "#####Generating configuration file#####" +cp /app/server-example.toml /app/conf/server.toml +else + echo "#####Configuration file already exists#####" +fi + +rtaddr=$(grep "cidr" /app/conf/server.toml |awk -F \" '{print $2}') +sysctl -w net.ipv4.ip_forward=1 +iptables -t nat -A POSTROUTING -s "${rtaddr}" -o eth0+ -j MASQUERADE +/app/anylink -conf="/app/conf/server.toml" From 656eca93a7a86bc23e7ba7ed79af21d50af6ebc3 Mon Sep 17 00:00:00 2001 From: jonny <475634114@qq.com> Date: Tue, 30 Mar 2021 15:49:09 +0800 Subject: [PATCH 2/5] Create generate-certs.sh --- docker/generate-certs.sh | 39 +++++++++++++++++++++++++++++++++++++++ 1 file changed, 39 insertions(+) create mode 100644 docker/generate-certs.sh diff --git a/docker/generate-certs.sh b/docker/generate-certs.sh new file mode 100644 index 0000000..1ef944e --- /dev/null +++ b/docker/generate-certs.sh @@ -0,0 +1,39 @@ +#!/bin/sh + +mkdir -p ssl + +OUTPUT_FILENAME="example.com" + +printf "[req] +prompt = no +default_bits = 4096 +default_md = sha256 +encrypt_key = no +string_mask = utf8only + +distinguished_name = cert_distinguished_name +req_extensions = req_x509v3_extensions +x509_extensions = req_x509v3_extensions + +[ cert_distinguished_name ] +C = CN +ST = BJ +L = BJ +O = example.com +OU = example.com +CN = example.com + +[req_x509v3_extensions] +basicConstraints = critical,CA:true +subjectKeyIdentifier = hash +keyUsage = critical,digitalSignature,keyCertSign,cRLSign #,keyEncipherment +extendedKeyUsage = critical,serverAuth #, clientAuth +subjectAltName = @alt_names + +[alt_names] +DNS.1 = example.com +DNS.2 = *.example.com + +">ssl/${OUTPUT_FILENAME}.conf + +openssl req -x509 -newkey rsa:2048 -keyout /app/conf/$OUTPUT_FILENAME.key -out /app/conf/$OUTPUT_FILENAME.crt -days 3600 -nodes -config ssl/${OUTPUT_FILENAME}.conf From ac412ea6c76d52b4ead93fe5b5036eed83e4bc5f Mon Sep 17 00:00:00 2001 From: jonny <475634114@qq.com> Date: Tue, 30 Mar 2021 15:50:24 +0800 Subject: [PATCH 3/5] Create server-example.toml --- docker/server-example.toml | 61 ++++++++++++++++++++++++++++++++++++++ 1 file changed, 61 insertions(+) create mode 100644 docker/server-example.toml diff --git a/docker/server-example.toml b/docker/server-example.toml new file mode 100644 index 0000000..6b53f4b --- /dev/null +++ b/docker/server-example.toml @@ -0,0 +1,61 @@ +#服务配置信息 + +#其他配置文件,可以使用绝对路径 +#或者相对于server.toml的路径 + +#数据文件 +db_file = "./data.db" +#证书文件 +cert_file = "./example.com.crt" +cert_key = "./example.com.key" +ui_path = "../ui" +files_path = "../files" +#日志目录,为空写入标准输出 +#log_path = "../log" +log_path = "" +log_level = "info" + +#系统名称 +issuer = "XX公司VPN" +#后台管理用户 +admin_user = "admin" +#pass 123456 +admin_pass = "usertoken" +jwt_secret = "jwttoken" + + +#vpn服务对外地址,影响开通邮件二维码 +link_addr = "test.example.com" + +#前台服务监听地址 +server_addr = ":443" +#后台服务监听地址 +admin_addr = ":8800" +#开启tcp proxy protocol协议 +proxy_protocol = false + +link_mode = "tun" + +#客户端分配的ip地址池 +ipv4_cidr = "192.168.10.0/24" +ipv4_gateway = "192.168.10.1" +ipv4_pool = ["192.168.10.100", "192.168.10.200"] + +#最大客户端数量 +max_client = 100 +#单个用户同时在线数量 +max_user_client = 3 +#IP租期(秒) +ip_lease = 1209600 + +#默认选择的组 +default_group = "one" + +#客户端失效检测时间(秒) dpd > keepalive +cstp_keepalive = 20 +cstp_dpd = 30 +mobile_keepalive = 50 +mobile_dpd = 60 +#session过期时间,用于断线重连,0永不过期 +session_timeout = 3600 +auth_timeout = 0 From fdca29790042cc3782c54a5ba0cb1f6631d3da98 Mon Sep 17 00:00:00 2001 From: jonny <475634114@qq.com> Date: Tue, 30 Mar 2021 15:53:13 +0800 Subject: [PATCH 4/5] Create Dockerfile --- Dockerfile | 26 ++++++++++++++++++++++++++ 1 file changed, 26 insertions(+) create mode 100644 Dockerfile diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 0000000..44f0d01 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,26 @@ +FROM golang:alpine as builder +ENV GOPROXY=https://goproxy.io \ + GO111MODULE=on \ + GOOS=linux +WORKDIR /root/ +RUN apk add --no-cache --update bash git g++ nodejs npm \ + && git clone https://github.com/bjdgyc/anylink.git \ + && cd anylink/server \ + && go build -o anylink -ldflags "-X main.COMMIT_ID=$(git rev-parse HEAD)" \ + && cd ../web \ + && npm install \ + && npx browserslist@latest --update-db \ + && npm run build + + +FROM golang:alpine +LABEL maintainer="www.mrdoc.fun" +COPY --from=builder /root/anylink/server /app/ +COPY --from=builder /root/anylink/web/ui /app/ui/ +COPY docker/ /app/ +WORKDIR /app +RUN apk add --no-cache pwgen bash iptables openssl ca-certificates \ + && rm -f /app/conf/server.toml \ + && chmod +x docker_entrypoint.sh + +ENTRYPOINT ["./docker_entrypoint.sh"] From 5e5395dabe63e3b4d552fdd616ff3ae777917dff Mon Sep 17 00:00:00 2001 From: jonny <475634114@qq.com> Date: Tue, 30 Mar 2021 15:56:43 +0800 Subject: [PATCH 5/5] Update Dockerfile --- Dockerfile | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/Dockerfile b/Dockerfile index 44f0d01..efbf806 100644 --- a/Dockerfile +++ b/Dockerfile @@ -17,7 +17,7 @@ FROM golang:alpine LABEL maintainer="www.mrdoc.fun" COPY --from=builder /root/anylink/server /app/ COPY --from=builder /root/anylink/web/ui /app/ui/ -COPY docker/ /app/ +COPY --from=builder /root/anylink/docker /app/ WORKDIR /app RUN apk add --no-cache pwgen bash iptables openssl ca-certificates \ && rm -f /app/conf/server.toml \