mirror of https://github.com/bjdgyc/anylink.git
commit
130ec45f2a
|
@ -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 --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 \
|
||||
&& chmod +x docker_entrypoint.sh
|
||||
|
||||
ENTRYPOINT ["./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"
|
|
@ -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
|
|
@ -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
|
Loading…
Reference in New Issue