├── .github └── workflows │ ├── docker-image-arm64.stable.yml │ ├── docker-image.stable.yml │ ├── vpnbridge-arm64.yml │ ├── vpnbridge-x86.yml │ ├── vpnclient-arm64.yml │ ├── vpnclient-x86.yml │ ├── vpnserver-arm64.yml │ └── vpnserver-x86.yml ├── Dockerfile ├── Dockerfile.stable ├── README.md ├── TODO.MD ├── docker-compose.vpnclient.yaml └── docker-compose.yaml /.github/workflows/docker-image-arm64.stable.yml: -------------------------------------------------------------------------------- 1 | name: Docker Image CI ARM64 Stable 2 | 3 | on: 4 | workflow_dispatch: 5 | 6 | jobs: 7 | docker: 8 | runs-on: ARM64 9 | steps: 10 | - 11 | name: Docker meta 12 | id: meta 13 | uses: docker/metadata-action@v4 14 | with: 15 | images: softethervpn/vpnserver-arm64 16 | tags: | 17 | # branch event 18 | type=ref,event=branch 19 | # tag event 20 | type=ref,event=tag 21 | - 22 | name: Set up Docker Buildx 23 | uses: docker/setup-buildx-action@v2 24 | - 25 | name: Login to DockerHub 26 | if: github.event_name != 'pull_request' 27 | uses: docker/login-action@v2 28 | with: 29 | username: ${{ secrets.DOCKERHUB_USERNAME }} 30 | password: ${{ secrets.DOCKERHUB_TOKEN }} 31 | - 32 | name: Build and push 33 | uses: docker/build-push-action@v3 34 | with: 35 | #context: "{{defaultContext}}:build" #might be used later if Dockerfile is somewhere else 36 | file: ./Dockerfile.stable 37 | push: ${{ github.event_name != 'pull_request' }} 38 | platforms: linux/arm64 39 | tags: ${{ steps.meta.outputs.tags }} 40 | labels: ${{ steps.meta.outputs.labels }} 41 | -------------------------------------------------------------------------------- /.github/workflows/docker-image.stable.yml: -------------------------------------------------------------------------------- 1 | name: Docker Image CI Stable 2 | 3 | on: 4 | workflow_dispatch: 5 | 6 | jobs: 7 | docker: 8 | runs-on: ubuntu-latest 9 | steps: 10 | - 11 | name: Docker meta 12 | id: meta 13 | uses: docker/metadata-action@v4 14 | with: 15 | images: softethervpn/vpnserver 16 | tags: | 17 | # branch event 18 | type=ref,event=branch 19 | # tag event 20 | type=ref,event=tag 21 | - 22 | name: Set up Docker Buildx 23 | uses: docker/setup-buildx-action@v2 24 | - 25 | name: Login to DockerHub 26 | if: github.event_name != 'pull_request' 27 | uses: docker/login-action@v2 28 | with: 29 | username: ${{ secrets.DOCKERHUB_USERNAME }} 30 | password: ${{ secrets.DOCKERHUB_TOKEN }} 31 | - 32 | name: Build and push 33 | uses: docker/build-push-action@v3 34 | with: 35 | #context: "{{defaultContext}}:build" #might be used later if Dockerfile is somewhere else 36 | file: ./Dockerfile.stable 37 | push: ${{ github.event_name != 'pull_request' }} 38 | platforms: linux/amd64 39 | tags: ${{ steps.meta.outputs.tags }} 40 | labels: ${{ steps.meta.outputs.labels }} 41 | -------------------------------------------------------------------------------- /.github/workflows/vpnbridge-arm64.yml: -------------------------------------------------------------------------------- 1 | name: vpnbridge ARM64 2 | 3 | on: 4 | schedule: 5 | - cron: "0 6 * * 1" # Every Monday at 6:00 AM 6 | push: 7 | branches: 8 | - "master" 9 | tags: 10 | - '*' 11 | pull_request: 12 | branches: 13 | - 'main' 14 | workflow_dispatch: 15 | 16 | jobs: 17 | docker: 18 | runs-on: ARM64 19 | steps: 20 | - 21 | name: Docker meta 22 | id: meta 23 | uses: docker/metadata-action@v5 24 | with: 25 | images: softethervpn/vpnbridge-arm64 26 | tags: | 27 | # set latest tag for default branch 28 | type=raw,value=latest,enable={{is_default_branch}} 29 | type=ref,event=pr 30 | type=semver,pattern={{version}} 31 | type=semver,pattern={{major}}.{{minor}} 32 | - 33 | name: Set up Docker Buildx 34 | uses: docker/setup-buildx-action@v3 35 | - 36 | name: Login to DockerHub 37 | if: github.event_name != 'pull_request' 38 | uses: docker/login-action@v3 39 | with: 40 | username: ${{ secrets.DOCKERHUB_USERNAME }} 41 | password: ${{ secrets.DOCKERHUB_TOKEN }} 42 | - 43 | name: Build and push 44 | uses: docker/build-push-action@v6 45 | with: 46 | #context: "{{defaultContext}}:build" #might be used later if Dockerfile is somewhere else 47 | file: ./Dockerfile 48 | target: vpnbridge 49 | push: ${{ github.event_name != 'pull_request' }} 50 | platforms: linux/arm64 51 | tags: ${{ steps.meta.outputs.tags }} 52 | labels: ${{ steps.meta.outputs.labels }} 53 | -------------------------------------------------------------------------------- /.github/workflows/vpnbridge-x86.yml: -------------------------------------------------------------------------------- 1 | name: vpnbridge x86 2 | 3 | on: 4 | schedule: 5 | - cron: "0 6 * * 1" # Every Monday at 6:00 AM 6 | push: 7 | branches: 8 | - "master" 9 | tags: 10 | - '*' 11 | pull_request: 12 | branches: 13 | - 'main' 14 | workflow_dispatch: 15 | 16 | jobs: 17 | docker-vpnbridge: 18 | runs-on: ubuntu-latest 19 | steps: 20 | - 21 | name: Docker meta 22 | id: meta 23 | uses: docker/metadata-action@v5 24 | with: 25 | images: softethervpn/vpnbridge 26 | tags: | 27 | # set latest tag for default branch 28 | type=raw,value=latest,enable={{is_default_branch}} 29 | type=ref,event=pr 30 | type=semver,pattern={{version}} 31 | type=semver,pattern={{major}}.{{minor}} 32 | - 33 | name: Set up Docker Buildx 34 | uses: docker/setup-buildx-action@v3 35 | - 36 | name: Login to DockerHub 37 | if: github.event_name != 'pull_request' 38 | uses: docker/login-action@v3 39 | with: 40 | username: ${{ secrets.DOCKERHUB_USERNAME }} 41 | password: ${{ secrets.DOCKERHUB_TOKEN }} 42 | - 43 | name: Build and push 44 | uses: docker/build-push-action@v6 45 | with: 46 | #context: "{{defaultContext}}:build" #might be used later if Dockerfile is somewhere else 47 | file: ./Dockerfile 48 | target: vpnbridge 49 | push: ${{ github.event_name != 'pull_request' }} 50 | #Multi-platform build sadly not supported by BLAKE2 51 | #platforms: linux/amd64,linux/arm64,linux/arm/v7 52 | tags: ${{ steps.meta.outputs.tags }} 53 | labels: ${{ steps.meta.outputs.labels }} 54 | -------------------------------------------------------------------------------- /.github/workflows/vpnclient-arm64.yml: -------------------------------------------------------------------------------- 1 | name: vpnclient ARM64 2 | 3 | on: 4 | schedule: 5 | - cron: "0 6 * * 1" # Every Monday at 6:00 AM 6 | push: 7 | branches: 8 | - "master" 9 | tags: 10 | - '*' 11 | pull_request: 12 | branches: 13 | - 'main' 14 | workflow_dispatch: 15 | 16 | jobs: 17 | docker: 18 | runs-on: ARM64 19 | steps: 20 | - 21 | name: Docker meta 22 | id: meta 23 | uses: docker/metadata-action@v5 24 | with: 25 | images: softethervpn/vpnclient-arm64 26 | tags: | 27 | # set latest tag for default branch 28 | type=raw,value=latest,enable={{is_default_branch}} 29 | type=ref,event=pr 30 | type=semver,pattern={{version}} 31 | type=semver,pattern={{major}}.{{minor}} 32 | - 33 | name: Set up Docker Buildx 34 | uses: docker/setup-buildx-action@v3 35 | - 36 | name: Login to DockerHub 37 | if: github.event_name != 'pull_request' 38 | uses: docker/login-action@v3 39 | with: 40 | username: ${{ secrets.DOCKERHUB_USERNAME }} 41 | password: ${{ secrets.DOCKERHUB_TOKEN }} 42 | - 43 | name: Build and push 44 | uses: docker/build-push-action@v6 45 | with: 46 | #context: "{{defaultContext}}:build" #might be used later if Dockerfile is somewhere else 47 | file: ./Dockerfile 48 | target: vpnclient 49 | push: ${{ github.event_name != 'pull_request' }} 50 | platforms: linux/arm64 51 | tags: ${{ steps.meta.outputs.tags }} 52 | labels: ${{ steps.meta.outputs.labels }} 53 | -------------------------------------------------------------------------------- /.github/workflows/vpnclient-x86.yml: -------------------------------------------------------------------------------- 1 | name: vpnclient x86 2 | 3 | on: 4 | schedule: 5 | - cron: "0 6 * * 1" # Every Monday at 6:00 AM 6 | push: 7 | branches: 8 | - "master" 9 | tags: 10 | - '*' 11 | pull_request: 12 | branches: 13 | - 'main' 14 | workflow_dispatch: 15 | 16 | jobs: 17 | docker-vpnclient: 18 | runs-on: ubuntu-latest 19 | steps: 20 | - 21 | name: Docker meta 22 | id: meta 23 | uses: docker/metadata-action@v5 24 | with: 25 | images: softethervpn/vpnclient 26 | tags: | 27 | # set latest tag for default branch 28 | type=raw,value=latest,enable={{is_default_branch}} 29 | type=ref,event=pr 30 | type=semver,pattern={{version}} 31 | type=semver,pattern={{major}}.{{minor}} 32 | - 33 | name: Set up Docker Buildx 34 | uses: docker/setup-buildx-action@v3 35 | - 36 | name: Login to DockerHub 37 | if: github.event_name != 'pull_request' 38 | uses: docker/login-action@v3 39 | with: 40 | username: ${{ secrets.DOCKERHUB_USERNAME }} 41 | password: ${{ secrets.DOCKERHUB_TOKEN }} 42 | - 43 | name: Build and push 44 | uses: docker/build-push-action@v6 45 | with: 46 | #context: "{{defaultContext}}:build" #might be used later if Dockerfile is somewhere else 47 | file: ./Dockerfile 48 | target: vpnclient 49 | push: ${{ github.event_name != 'pull_request' }} 50 | #Multi-platform build sadly not supported by BLAKE2 51 | #platforms: linux/amd64,linux/arm64,linux/arm/v7 52 | tags: ${{ steps.meta.outputs.tags }} 53 | labels: ${{ steps.meta.outputs.labels }} 54 | -------------------------------------------------------------------------------- /.github/workflows/vpnserver-arm64.yml: -------------------------------------------------------------------------------- 1 | name: vpnserver ARM64 2 | 3 | on: 4 | schedule: 5 | - cron: "0 6 * * 1" # Every Monday at 6:00 AM 6 | push: 7 | branches: 8 | - "master" 9 | tags: 10 | - '*' 11 | pull_request: 12 | branches: 13 | - 'main' 14 | workflow_dispatch: 15 | 16 | jobs: 17 | docker: 18 | runs-on: ARM64 19 | steps: 20 | - 21 | name: Docker meta 22 | id: meta 23 | uses: docker/metadata-action@v5 24 | with: 25 | images: softethervpn/vpnserver-arm64 26 | tags: | 27 | # set latest tag for default branch 28 | type=raw,value=latest,enable={{is_default_branch}} 29 | type=ref,event=pr 30 | type=semver,pattern={{version}} 31 | type=semver,pattern={{major}}.{{minor}} 32 | - 33 | name: Set up Docker Buildx 34 | uses: docker/setup-buildx-action@v3 35 | - 36 | name: Login to DockerHub 37 | if: github.event_name != 'pull_request' 38 | uses: docker/login-action@v3 39 | with: 40 | username: ${{ secrets.DOCKERHUB_USERNAME }} 41 | password: ${{ secrets.DOCKERHUB_TOKEN }} 42 | - 43 | name: Build and push 44 | uses: docker/build-push-action@v6 45 | with: 46 | #context: "{{defaultContext}}:build" #might be used later if Dockerfile is somewhere else 47 | file: ./Dockerfile 48 | target: vpnserver 49 | push: ${{ github.event_name != 'pull_request' }} 50 | platforms: linux/arm64 51 | tags: ${{ steps.meta.outputs.tags }} 52 | labels: ${{ steps.meta.outputs.labels }} 53 | -------------------------------------------------------------------------------- /.github/workflows/vpnserver-x86.yml: -------------------------------------------------------------------------------- 1 | name: vpnserver x86 2 | 3 | on: 4 | schedule: 5 | - cron: "0 6 * * 1" # Every Monday at 6:00 AM 6 | push: 7 | branches: 8 | - "master" 9 | tags: 10 | - '*' 11 | pull_request: 12 | branches: 13 | - 'main' 14 | workflow_dispatch: 15 | 16 | jobs: 17 | docker: 18 | runs-on: ubuntu-latest 19 | steps: 20 | - 21 | name: Docker meta 22 | id: meta 23 | uses: docker/metadata-action@v5 24 | with: 25 | images: softethervpn/vpnserver 26 | tags: | 27 | # set latest tag for default branch 28 | type=raw,value=latest,enable={{is_default_branch}} 29 | type=ref,event=pr 30 | type=semver,pattern={{version}} 31 | type=semver,pattern={{major}}.{{minor}} 32 | - 33 | name: Set up Docker Buildx 34 | uses: docker/setup-buildx-action@v3 35 | - 36 | name: Login to DockerHub 37 | if: github.event_name != 'pull_request' 38 | uses: docker/login-action@v3 39 | with: 40 | username: ${{ secrets.DOCKERHUB_USERNAME }} 41 | password: ${{ secrets.DOCKERHUB_TOKEN }} 42 | - 43 | name: Build and push 44 | uses: docker/build-push-action@v6 45 | with: 46 | #context: "{{defaultContext}}:build" #might be used later if Dockerfile is somewhere else 47 | file: ./Dockerfile 48 | target: vpnserver 49 | push: ${{ github.event_name != 'pull_request' }} 50 | platforms: linux/amd64 51 | tags: ${{ steps.meta.outputs.tags }} 52 | labels: ${{ steps.meta.outputs.labels }} 53 | -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM alpine AS builder 2 | RUN mkdir /usr/local/src && apk add binutils --no-cache\ 3 | linux-headers \ 4 | build-base \ 5 | readline-dev \ 6 | openssl-dev \ 7 | ncurses-dev \ 8 | git \ 9 | cmake \ 10 | zlib-dev \ 11 | libsodium-dev \ 12 | gnu-libiconv 13 | 14 | ENV LD_PRELOAD=/usr/lib/preloadable_libiconv.so 15 | WORKDIR /usr/local/src 16 | RUN git clone https://github.com/SoftEtherVPN/SoftEtherVPN.git 17 | #RUN git clone -b ${GIT_TAG} https://github.com/SoftEtherVPN/SoftEtherVPN.git 18 | ENV USE_MUSL=YES 19 | ENV CMAKE_FLAGS="-DSE_PIDDIR=/run/softether -DSE_LOGDIR=/var/log/softether -DSE_DBDIR=/var/lib/softether" 20 | RUN cd SoftEtherVPN &&\ 21 | git submodule init &&\ 22 | git submodule update &&\ 23 | ./configure &&\ 24 | make -j $(getconf _NPROCESSORS_ONLN) -C build 25 | 26 | FROM alpine AS base 27 | RUN apk add --no-cache readline \ 28 | openssl \ 29 | libsodium \ 30 | gnu-libiconv \ 31 | iptables 32 | ENV LD_PRELOAD=/usr/lib/preloadable_libiconv.so 33 | WORKDIR /usr/local/bin 34 | VOLUME /var/log/softether 35 | VOLUME /var/lib/softether 36 | VOLUME /run/softether 37 | COPY --from=builder /usr/local/src/SoftEtherVPN/build/vpncmd /usr/local/src/SoftEtherVPN/build/hamcore.se2 ./ 38 | COPY --from=builder /usr/local/src/SoftEtherVPN/build/libcedar.so /usr/local/src/SoftEtherVPN/build/libmayaqua.so /usr/local/lib/ 39 | 40 | 41 | FROM base AS vpnserver 42 | COPY --from=builder /usr/local/src/SoftEtherVPN/build/vpnserver ./ 43 | EXPOSE 443/tcp 992/tcp 1194/tcp 1194/udp 5555/tcp 500/udp 4500/udp 44 | CMD ["/usr/local/bin/vpnserver", "execsvc"] 45 | 46 | 47 | FROM base AS vpnclient 48 | COPY --from=builder /usr/local/src/SoftEtherVPN/build/vpnclient ./ 49 | CMD ["/usr/local/bin/vpnclient", "execsvc"] 50 | 51 | 52 | FROM base AS vpnbridge 53 | COPY --from=builder /usr/local/src/SoftEtherVPN/build/vpnbridge ./ 54 | CMD ["/usr/local/bin/vpnbridge", "execsvc"] -------------------------------------------------------------------------------- /Dockerfile.stable: -------------------------------------------------------------------------------- 1 | FROM alpine as builder 2 | ARG GIT_TAG=v4.43-9799-beta 3 | RUN mkdir /usr/local/src && apk add binutils --no-cache\ 4 | build-base \ 5 | readline-dev \ 6 | openssl-dev \ 7 | ncurses-dev \ 8 | git \ 9 | cmake \ 10 | zlib-dev \ 11 | libsodium-dev \ 12 | gnu-libiconv 13 | 14 | ENV LD_PRELOAD /usr/lib/preloadable_libiconv.so 15 | WORKDIR /usr/local/src 16 | RUN git clone -b ${GIT_TAG} https://github.com/SoftEtherVPN/SoftEtherVPN_Stable.git 17 | ENV USE_MUSL=YES 18 | RUN cd SoftEtherVPN_Stable &&\ 19 | git submodule init &&\ 20 | git submodule update &&\ 21 | ./configure &&\ 22 | make 23 | 24 | FROM alpine 25 | RUN apk add --no-cache readline \ 26 | openssl \ 27 | libsodium \ 28 | gnu-libiconv\ 29 | iptables 30 | ENV LD_PRELOAD /usr/lib/preloadable_libiconv.so 31 | ENV LD_LIBRARY_PATH /root 32 | WORKDIR /usr/local/bin 33 | VOLUME /mnt 34 | RUN ln -s /mnt/vpn_server.config vpn_server.config && \ 35 | mkdir /mnt/backup.vpn_server.config &&\ 36 | ln -s /mnt/backup.vpn_server.config backup.vpn_server.config &&\ 37 | ln -s /mnt/lang.config lang.config 38 | COPY --from=builder /usr/local/src/SoftEtherVPN_Stable/bin/vpnserver/vpnserver /usr/local/src/SoftEtherVPN_Stable/bin/vpncmd/vpncmd /usr/local/src/SoftEtherVPN_Stable/bin/vpnserver/hamcore.se2 ./ 39 | 40 | EXPOSE 443/tcp 992/tcp 1194/tcp 1194/udp 5555/tcp 500/udp 4500/udp 41 | CMD ["/usr/local/bin/vpnserver", "execsvc"] 42 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # SoftetherVPN-docker 2 | 3 | This container is designed to be as small as possible and host a SoftEther VPN Server 4 | It´s based on Alpine so resulting Image is kept as small as 15MB! 5 | 6 | ## Not working 7 | 8 | * bridging to a physical Ethernet adapter 9 | 10 | ## working 11 | 12 | * OpenVPN 13 | * L2tp 14 | * SSL 15 | * SecureNAT 16 | 17 | 18 | 19 | ## Available Tags 20 | 21 | 22 | |Image|Description| 23 | |---|---| 24 | |softethervpn/vpnserver:stable|Latest stable release from https://github.com/SoftEtherVPN/SoftEtherVPN_Stable| 25 | |softethervpn/vpnserver:v4.39-9772-beta|Tagged build| 26 | |softethervpn/vpnserver:latest|Latest commits from https://github.com/SoftEtherVPN/SoftEtherVPN| 27 | 28 | 29 | You should always specify your wanted version like `softethervpn/vpnserver:5.02.5180` 30 | 31 | ## Usage docker run 32 | 33 | This will keep your config and Logfiles in the docker volume `softetherdata` 34 | 35 | `docker run -d --rm --name softether-vpn-server -v softetherdata:/mnt -p 443:443/tcp -p 992:992/tcp -p 1194:1194/udp -p 5555:5555/tcp -p 500:500/udp -p 4500:4500/udp -p 1701:1701/udp --cap-add NET_ADMIN softethervpn/vpnserver:stable` 36 | 37 | ## Port requirements 38 | 39 | As there are different operating modes for SoftetherVPN there is a variety of ports that might or might not be needed. 40 | For operation with Softether Clients at least 443, 992 or 5555 is needed. 41 | See https://www.softether.org/4-docs/1-manual/1/1.6 for reference on the Softether ports. 42 | Others are commented out in the docker-compose example. 43 | 44 | ## Usage docker-compose 45 | 46 | The same command can be achieved by docker-compose, the docker compose file is in the repository. 47 | You can specify the respective docker-compose.yaml like so: 48 | 49 | `docker-compose -f docker-compose.vpnclient.yaml up -d` 50 | 51 | By default the docker-compose.yaml is used: 52 | 53 | ``` 54 | version: '3' 55 | 56 | services: 57 | softether: 58 | image: softethervpn/vpnserver:latest 59 | cap_add: 60 | - NET_ADMIN 61 | restart: always 62 | ports: 63 | #- 53:53 #DNS tunneling 64 | - 443:443 #Management and HTTPS tunneling 65 | #- 992:992 #HTTPS tunneling 66 | #- 1194:1194/udp #OpenVPN 67 | #- 5555:5555 #HTTPS tunneling 68 | #- 500:500/udp #IPsec/L2TP 69 | #- 4500:4500/udp #IPsec/L2TP 70 | #- 1701:1701/udp #IPsec/L2TP 71 | volumes: 72 | - "/etc/localtime:/etc/localtime:ro" 73 | - "/etc/timezone:/etc/timezone:ro" 74 | - "./softether_data:/var/lib/softether" 75 | - "./softether_log:/var/log/softether" 76 | # - "./adminip.txt:/var/lib/softether/adminip.txt:ro" 77 | ``` 78 | 79 | ### Use vpncmd 80 | 81 | With newer releases vpncmd is directly in the container so you can use it to configure vpn. You can can run it once the container is running : 82 | 83 | `docker exec -it softether-vpn-server vpncmd localhost` 84 | example to configure a vpnclient 85 | 86 | ``` 87 | docker exec -it softether-vpn-server vpncmd localhost /client 88 | 89 | VPN Client> AccountSet homevpn /SERVER:192.168.1.1:443 /HUB:VPN 90 | VPN Client> AccountPasswordSet homevpn /PASSWORD:verysecurepassword /TYPE:standard 91 | VPN Client> AccountConnect homevpn 92 | 93 | #Automatically connect once container starts 94 | VPN Client> AccountStartupSet homevpn 95 | 96 | #Checking State 97 | VPN Client> AccountStatusGet homevpn 98 | 99 | ``` 100 | 101 | ## Building 102 | 103 | ` docker build --target vpnclient -t softethevpn:latest .` 104 | -------------------------------------------------------------------------------- /TODO.MD: -------------------------------------------------------------------------------- 1 | 2 | * define needed "flavours" / tags, (server,client,vpncmd) 3 | * delete this file ;) 4 | 5 | 6 | docker buildx build -t softethervpn/vpnserver:stable -f .\Dockerfile.stable --push --platform linux/amd64,linux/arm64,linux/arm/v7 . -------------------------------------------------------------------------------- /docker-compose.vpnclient.yaml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | softether: 5 | image: softethervpn/vpnclient:latest 6 | devices: 7 | - /dev/net/tun:/dev/net/tun 8 | cap_add: 9 | - NET_ADMIN 10 | restart: always 11 | volumes: 12 | - "/etc/localtime:/etc/localtime:ro" 13 | - "/etc/timezone:/etc/timezone:ro" 14 | - "./softether_data:/var/lib/softether" 15 | - "./softether_log:/var/log/softether" 16 | # - "./adminip.txt:/var/lib/softether/adminip.txt:ro" 17 | -------------------------------------------------------------------------------- /docker-compose.yaml: -------------------------------------------------------------------------------- 1 | version: '3' 2 | 3 | services: 4 | softether: 5 | image: softethervpn/vpnserver:latest 6 | cap_add: 7 | - NET_ADMIN 8 | restart: always 9 | ports: 10 | #- 53:53 #DNS tunneling 11 | - 443:443 #Management and HTTPS tunneling 12 | - 992:992 #HTTPS tunneling 13 | #- 1194:1194/udp #OpenVPN 14 | #- 5555:5555 #HTTPS tunneling 15 | #- 500:500/udp #IPsec/L2TP 16 | #- 4500:4500/udp #IPsec/L2TP 17 | #- 1701:1701/udp #IPsec/L2TP 18 | volumes: 19 | - "/etc/localtime:/etc/localtime:ro" 20 | - "/etc/timezone:/etc/timezone:ro" 21 | - "./softether_data:/var/lib/softether" 22 | - "./softether_log:/var/log/softether" 23 | # - "./adminip.txt:/var/lib/softether/adminip.txt:ro" 24 | --------------------------------------------------------------------------------