├── .github └── workflows │ ├── Test.yml │ └── dockerhub.yml ├── Dockerfile ├── Dockerfile.alpine ├── README.md └── entry.sh /.github/workflows/Test.yml: -------------------------------------------------------------------------------- 1 | name: Test 2 | on: 3 | workflow_dispatch: 4 | 5 | push: 6 | branches: 7 | - '*' 8 | paths: 9 | - '**' 10 | - '!**.md' 11 | 12 | pull_request: 13 | branches: 14 | - '*' 15 | paths: 16 | - '**' 17 | - '!**.md' 18 | 19 | 20 | jobs: 21 | Ubuntu: 22 | runs-on: ubuntu-latest 23 | steps: 24 | - uses: actions/checkout@v2 25 | - name: Build image 26 | run: docker build -t wg . -f Dockerfile 27 | - name: Test single container 28 | run: | 29 | docker run --rm -id \ 30 | --name wgcf \ 31 | --sysctl net.ipv6.conf.all.disable_ipv6=0 \ 32 | --privileged --cap-add net_admin \ 33 | -v /lib/modules:/lib/modules \ 34 | -v $(pwd)/wgcf:/wgcf \ 35 | wg 36 | while ! docker logs wgcf | grep "OK, wgcf is up"; do 37 | echo wait 38 | sleep 1 39 | done 40 | docker exec -i wgcf curl ipinfo.io 41 | docker exec -i wgcf curl ipv6.ip.sb 42 | docker run --rm --network container:wgcf curlimages/curl curl ipinfo.io 43 | docker run --rm --network container:wgcf curlimages/curl curl ipv6.ip.sb 44 | docker stop wgcf 45 | 46 | - name: Test single container V4 47 | run: | 48 | docker run --rm -id \ 49 | --name wgcf \ 50 | --sysctl net.ipv6.conf.all.disable_ipv6=0 \ 51 | --privileged --cap-add net_admin \ 52 | -v /lib/modules:/lib/modules \ 53 | -v $(pwd)/wgcf:/wgcf \ 54 | wg -4 55 | while ! docker logs wgcf | grep "OK, wgcf is up"; do 56 | echo wait 57 | sleep 1 58 | done 59 | docker exec -i wgcf curl ipinfo.io 60 | docker run --rm --network container:wgcf curlimages/curl curl ipinfo.io 61 | docker stop wgcf 62 | 63 | - name: Test single container V6 64 | run: | 65 | docker run --rm -id \ 66 | --name wgcf \ 67 | --sysctl net.ipv6.conf.all.disable_ipv6=0 \ 68 | --privileged --cap-add net_admin \ 69 | -v /lib/modules:/lib/modules \ 70 | -v $(pwd)/wgcf:/wgcf \ 71 | wg -6 72 | while ! docker logs wgcf | grep "OK, wgcf is up"; do 73 | echo wait 74 | sleep 1 75 | done 76 | docker exec -i wgcf curl ipv6.ip.sb 77 | docker run --rm --network container:wgcf curlimages/curl curl ipv6.ip.sb 78 | docker stop wgcf 79 | 80 | Alpine: 81 | runs-on: ubuntu-latest 82 | steps: 83 | - uses: actions/checkout@v2 84 | - name: Build image 85 | run: docker build -t wg-alpine . -f Dockerfile.alpine 86 | - name: Test single container 87 | run: | 88 | docker run --rm -id \ 89 | --name wgcf \ 90 | --sysctl net.ipv6.conf.all.disable_ipv6=0 \ 91 | --privileged --cap-add net_admin \ 92 | -v /lib/modules:/lib/modules \ 93 | -v $(pwd)/wgcf:/wgcf \ 94 | wg-alpine 95 | while ! docker logs wgcf | grep "OK, wgcf is up"; do 96 | echo wait 97 | sleep 1 98 | done 99 | docker exec -i wgcf curl ipinfo.io 100 | docker exec -i wgcf curl ipv6.ip.sb 101 | docker run --rm --network container:wgcf curlimages/curl curl ipinfo.io 102 | docker run --rm --network container:wgcf curlimages/curl curl ipv6.ip.sb 103 | docker stop wgcf 104 | 105 | 106 | - name: Test single container V4 107 | run: | 108 | docker run --rm -id \ 109 | --name wgcf \ 110 | --sysctl net.ipv6.conf.all.disable_ipv6=0 \ 111 | --privileged --cap-add net_admin \ 112 | -v /lib/modules:/lib/modules \ 113 | -v $(pwd)/wgcf:/wgcf \ 114 | wg-alpine -4 115 | while ! docker logs wgcf | grep "OK, wgcf is up"; do 116 | echo wait 117 | sleep 1 118 | done 119 | docker exec -i wgcf curl ipinfo.io 120 | docker run --rm --network container:wgcf curlimages/curl curl ipinfo.io 121 | docker stop wgcf 122 | 123 | 124 | - name: Test single container V6 125 | run: | 126 | docker run --rm -id \ 127 | --name wgcf \ 128 | --sysctl net.ipv6.conf.all.disable_ipv6=0 \ 129 | --privileged --cap-add net_admin \ 130 | -v /lib/modules:/lib/modules \ 131 | -v $(pwd)/wgcf:/wgcf \ 132 | wg-alpine -6 133 | while ! docker logs wgcf | grep "OK, wgcf is up"; do 134 | echo wait 135 | sleep 1 136 | done 137 | docker exec -i wgcf curl ipv6.ip.sb 138 | docker run --rm --network container:wgcf curlimages/curl curl ipv6.ip.sb 139 | docker stop wgcf 140 | 141 | 142 | 143 | Ubuntu-HostMode: 144 | runs-on: ubuntu-latest 145 | steps: 146 | - uses: actions/checkout@v2 147 | - name: Build image 148 | run: docker build -t wg . -f Dockerfile 149 | - name: Test single container 150 | run: | 151 | docker run --rm -id \ 152 | --name wgcf \ 153 | --net=host \ 154 | --privileged --cap-add net_admin \ 155 | -v /lib/modules:/lib/modules \ 156 | -v $(pwd)/wgcf:/wgcf \ 157 | wg 158 | while ! docker logs wgcf | grep "OK, wgcf is up"; do 159 | echo wait 160 | sleep 1 161 | done 162 | curl ipinfo.io 163 | curl ipv6.ip.sb 164 | docker stop wgcf 165 | 166 | 167 | - name: Test single container V4 168 | run: | 169 | docker run --rm -id \ 170 | --name wgcf \ 171 | --net=host \ 172 | --privileged --cap-add net_admin \ 173 | -v /lib/modules:/lib/modules \ 174 | -v $(pwd)/wgcf:/wgcf \ 175 | wg -4 176 | while ! docker logs wgcf | grep "OK, wgcf is up"; do 177 | echo wait 178 | sleep 1 179 | done 180 | curl ipinfo.io 181 | docker stop wgcf 182 | 183 | 184 | - name: Test single container V6 185 | run: | 186 | docker run --rm -id \ 187 | --name wgcf \ 188 | --net=host \ 189 | --privileged --cap-add net_admin \ 190 | -v /lib/modules:/lib/modules \ 191 | -v $(pwd)/wgcf:/wgcf \ 192 | wg -6 193 | while ! docker logs wgcf | grep "OK, wgcf is up"; do 194 | echo wait 195 | sleep 1 196 | done 197 | curl ipv6.ip.sb 198 | docker stop wgcf 199 | 200 | 201 | Alpine-HostMode: 202 | runs-on: ubuntu-latest 203 | steps: 204 | - uses: actions/checkout@v2 205 | - name: Build image 206 | run: docker build -t wg-alpine . -f Dockerfile.alpine 207 | - name: Test single container 208 | run: | 209 | docker run --rm -id \ 210 | --name wgcf \ 211 | --net=host \ 212 | --privileged --cap-add net_admin \ 213 | -v /lib/modules:/lib/modules \ 214 | -v $(pwd)/wgcf:/wgcf \ 215 | wg-alpine 216 | while ! docker logs wgcf | grep "OK, wgcf is up"; do 217 | echo wait 218 | sleep 1 219 | done 220 | curl ipinfo.io 221 | curl ipv6.ip.sb 222 | docker stop wgcf 223 | 224 | 225 | - name: Test single container V4 226 | run: | 227 | docker run --rm -id \ 228 | --name wgcf \ 229 | --net=host \ 230 | --privileged --cap-add net_admin \ 231 | -v /lib/modules:/lib/modules \ 232 | -v $(pwd)/wgcf:/wgcf \ 233 | wg-alpine -4 234 | while ! docker logs wgcf | grep "OK, wgcf is up"; do 235 | echo wait 236 | sleep 1 237 | done 238 | curl ipinfo.io 239 | docker stop wgcf 240 | 241 | 242 | - name: Test single container V6 243 | run: | 244 | docker run --rm -id \ 245 | --name wgcf \ 246 | --net=host \ 247 | --privileged --cap-add net_admin \ 248 | -v /lib/modules:/lib/modules \ 249 | -v $(pwd)/wgcf:/wgcf \ 250 | wg-alpine -6 251 | while ! docker logs wgcf | grep "OK, wgcf is up"; do 252 | echo wait 253 | sleep 1 254 | done 255 | curl ipv6.ip.sb 256 | docker stop wgcf 257 | 258 | 259 | 260 | 261 | 262 | 263 | 264 | 265 | 266 | 267 | 268 | 269 | 270 | 271 | 272 | 273 | 274 | 275 | 276 | 277 | 278 | 279 | -------------------------------------------------------------------------------- /.github/workflows/dockerhub.yml: -------------------------------------------------------------------------------- 1 | name: DockerHub 2 | 3 | on: 4 | push: 5 | branches: 6 | - '*' 7 | 8 | 9 | 10 | jobs: 11 | multiarch-build-debian: 12 | runs-on: ubuntu-latest 13 | steps: 14 | 15 | - name: Checkout 16 | uses: actions/checkout@v3 17 | with: 18 | fetch-depth: 0 19 | - name: Docker meta 20 | id: meta 21 | uses: docker/metadata-action@v4 22 | with: 23 | images: neilpang/wgcf-docker 24 | tags: | 25 | type=semver,pattern={{version}} 26 | type=semver,pattern={{major}}.{{minor}} 27 | type=raw,value=latest,enable=${{ endsWith(github.ref, github.event.repository.default_branch) }} 28 | - name: Set up QEMU 29 | uses: docker/setup-qemu-action@v2 30 | 31 | - name: Set up Docker Buildx 32 | uses: docker/setup-buildx-action@v2 33 | 34 | - name: Login to DockerHub 35 | uses: docker/login-action@v1 36 | with: 37 | username: ${{ secrets.DOCKERHUB_USERNAME }} 38 | password: ${{ secrets.DOCKERHUB_TOKEN }} 39 | 40 | - name: Build and push the Debian based image 41 | id: docker_build_debian 42 | uses: docker/build-push-action@v2 43 | with: 44 | file: Dockerfile 45 | platforms: linux/amd64,linux/arm64,linux/arm/v7 46 | push: true 47 | tags: ${{ steps.meta.outputs.tags }} 48 | labels: ${{ steps.meta.outputs.labels }} 49 | 50 | - name: Images digests 51 | run: echo ${{ steps.docker_build_debian.outputs.digest }} 52 | 53 | multiarch-build-alpine: 54 | runs-on: ubuntu-latest 55 | steps: 56 | 57 | - name: Checkout 58 | uses: actions/checkout@v3 59 | with: 60 | fetch-depth: 0 61 | 62 | - name: Docker meta 63 | id: meta 64 | uses: docker/metadata-action@v4 65 | with: 66 | images: neilpang/wgcf-docker 67 | tags: | 68 | type=semver,suffix=-alpine,pattern={{version}} 69 | type=semver,suffix=-alpine,pattern={{major}}.{{minor}} 70 | type=raw,value=alpine,enable=${{ endsWith(github.ref, github.event.repository.default_branch) }} 71 | flavor: latest=false 72 | - name: Set up QEMU 73 | uses: docker/setup-qemu-action@v2 74 | 75 | - name: Set up Docker Buildx 76 | uses: docker/setup-buildx-action@v2 77 | 78 | - name: Login to DockerHub 79 | uses: docker/login-action@v1 80 | with: 81 | username: ${{ secrets.DOCKERHUB_USERNAME }} 82 | password: ${{ secrets.DOCKERHUB_TOKEN }} 83 | 84 | - name: Build and push the Alpine based image 85 | id: docker_build_alpine 86 | uses: docker/build-push-action@v2 87 | with: 88 | file: Dockerfile.alpine 89 | platforms: linux/amd64,linux/arm64,linux/arm/v7 90 | push: true 91 | tags: ${{ steps.meta.outputs.tags }} 92 | labels: ${{ steps.meta.outputs.labels }} 93 | 94 | - name: Images digests 95 | run: echo ${{ steps.docker_build_alpine.outputs.digest }} -------------------------------------------------------------------------------- /Dockerfile: -------------------------------------------------------------------------------- 1 | FROM ubuntu:20.04 2 | 3 | 4 | RUN apt-get update && apt-get install -y \ 5 | curl ca-certificates \ 6 | iproute2 net-tools iptables \ 7 | wireguard-tools openresolv kmod --no-install-recommends \ 8 | && rm -rf /var/lib/apt/lists/* 9 | 10 | 11 | RUN curl -fsSL git.io/wgcf.sh | bash && mkdir -p /wgcf 12 | 13 | WORKDIR /wgcf 14 | 15 | VOLUME /wgcf 16 | 17 | 18 | COPY entry.sh /entry.sh 19 | RUN chmod +x /entry.sh 20 | 21 | ENTRYPOINT ["/entry.sh"] 22 | 23 | 24 | -------------------------------------------------------------------------------- /Dockerfile.alpine: -------------------------------------------------------------------------------- 1 | FROM alpine:3.17 2 | 3 | 4 | RUN apk update -f \ 5 | && apk --no-cache add -f \ 6 | curl ca-certificates \ 7 | iproute2 net-tools iptables \ 8 | wireguard-tools openresolv \ 9 | && rm -rf /var/cache/apk/* 10 | 11 | 12 | RUN curl -fsSL git.io/wgcf.sh | bash && mkdir -p /wgcf 13 | 14 | WORKDIR /wgcf 15 | 16 | VOLUME /wgcf 17 | 18 | 19 | COPY entry.sh /entry.sh 20 | RUN chmod +x /entry.sh 21 | 22 | ENTRYPOINT ["/entry.sh"] 23 | 24 | 25 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # wgcf-docker 2 | CloudFlare warp in docker 3 | 4 | 5 | 1. Run a single container: 6 | 7 | ``` 8 | 9 | docker run --rm -it \ 10 | --name wgcf \ 11 | --sysctl net.ipv6.conf.all.disable_ipv6=0 \ 12 | --privileged --cap-add net_admin \ 13 | -v /lib/modules:/lib/modules \ 14 | -v $(pwd)/wgcf:/wgcf \ 15 | neilpang/wgcf-docker 16 | 17 | 18 | 19 | The above command will enable both ipv4 and ipv6, you can enable ipv4 or ipv6 only like following: 20 | 21 | 22 | #enable ipv4 only: 23 | 24 | 25 | 26 | docker run --rm -it \ 27 | --name wgcf \ 28 | --sysctl net.ipv6.conf.all.disable_ipv6=0 \ 29 | --privileged --cap-add net_admin \ 30 | -v /lib/modules:/lib/modules \ 31 | -v $(pwd)/wgcf:/wgcf \ 32 | neilpang/wgcf-docker -4 33 | 34 | 35 | 36 | #enable ipv6 only: 37 | 38 | 39 | 40 | docker run --rm -it \ 41 | --name wgcf \ 42 | --sysctl net.ipv6.conf.all.disable_ipv6=0 \ 43 | --privileged --cap-add net_admin \ 44 | -v /lib/modules:/lib/modules \ 45 | -v $(pwd)/wgcf:/wgcf \ 46 | neilpang/wgcf-docker -6 47 | 48 | 49 | 50 | ``` 51 | 52 | or: 53 | 54 | ``` 55 | docker run --rm -it \ 56 | --name wgcf \ 57 | --sysctl net.ipv6.conf.all.disable_ipv6=0 \ 58 | --privileged --cap-add net_admin \ 59 | -v /lib/modules:/lib/modules \ 60 | -v $(pwd)/wgcf:/wgcf \ 61 | neilpang/wgcf-docker:alpine 62 | 63 | 64 | 65 | 66 | 67 | The above command will enable both ipv4 and ipv6, you can enable ipv4 or ipv6 only like following: 68 | 69 | 70 | #enable ipv4 only: 71 | 72 | 73 | docker run --rm -it \ 74 | --name wgcf \ 75 | --sysctl net.ipv6.conf.all.disable_ipv6=0 \ 76 | --privileged --cap-add net_admin \ 77 | -v /lib/modules:/lib/modules \ 78 | -v $(pwd)/wgcf:/wgcf \ 79 | neilpang/wgcf-docker:alpine -4 80 | 81 | 82 | 83 | #enable ipv6 only: 84 | 85 | 86 | docker run --rm -it \ 87 | --name wgcf \ 88 | --sysctl net.ipv6.conf.all.disable_ipv6=0 \ 89 | --privileged --cap-add net_admin \ 90 | -v /lib/modules:/lib/modules \ 91 | -v $(pwd)/wgcf:/wgcf \ 92 | neilpang/wgcf-docker:alpine -6 93 | 94 | 95 | 96 | 97 | ``` 98 | 99 | 100 | 101 | 102 | 2. If another container needs to use the wgcf network, run it like: 103 | 104 | ``` 105 | 106 | docker run --rm -it --network container:wgcf curlimages/curl curl ipinfo.io 107 | 108 | ``` 109 | 110 | 111 | 3. Docker-compose example: 112 | 113 | ``` 114 | Enable both ipv4 and ipv6 by default: 115 | 116 | 117 | version: "2.4" 118 | services: 119 | wgcf: 120 | image: neilpang/wgcf-docker:latest 121 | volumes: 122 | - ./wgcf:/wgcf 123 | - /lib/modules:/lib/modules 124 | privileged: true 125 | sysctls: 126 | net.ipv6.conf.all.disable_ipv6: 0 127 | cap_add: 128 | - NET_ADMIN 129 | 130 | 131 | test: 132 | image: curlimages/curl 133 | network_mode: "service:wgcf" 134 | depends_on: 135 | - wgcf 136 | command: curl ipinfo.io 137 | 138 | 139 | 140 | 141 | Enable ipv6 only: 142 | 143 | version: "2.4" 144 | services: 145 | wgcf: 146 | image: neilpang/wgcf-docker:latest 147 | volumes: 148 | - ./wgcf:/wgcf 149 | - /lib/modules:/lib/modules 150 | privileged: true 151 | sysctls: 152 | net.ipv6.conf.all.disable_ipv6: 0 153 | cap_add: 154 | - NET_ADMIN 155 | command: "-6" 156 | 157 | 158 | test: 159 | image: curlimages/curl 160 | network_mode: "service:wgcf" 161 | depends_on: 162 | - wgcf 163 | command: curl ipv6.ip.sb 164 | 165 | 166 | 167 | 168 | 169 | Enable ipv4 only: 170 | 171 | 172 | 173 | version: "2.4" 174 | services: 175 | wgcf: 176 | image: neilpang/wgcf-docker:latest 177 | volumes: 178 | - ./wgcf:/wgcf 179 | - /lib/modules:/lib/modules 180 | privileged: true 181 | sysctls: 182 | net.ipv6.conf.all.disable_ipv6: 0 183 | cap_add: 184 | - NET_ADMIN 185 | command: "-4" 186 | 187 | 188 | test: 189 | image: curlimages/curl 190 | network_mode: "service:wgcf" 191 | depends_on: 192 | - wgcf 193 | command: curl ipinfo.io 194 | 195 | 196 | 197 | ``` 198 | 199 | or: 200 | 201 | ``` 202 | 203 | Enable both ipv4 and ipv6 by default: 204 | 205 | 206 | 207 | version: "2.4" 208 | services: 209 | wgcf: 210 | image: neilpang/wgcf-docker:alpine 211 | volumes: 212 | - ./wgcf:/wgcf 213 | - /lib/modules:/lib/modules 214 | privileged: true 215 | sysctls: 216 | net.ipv6.conf.all.disable_ipv6: 0 217 | cap_add: 218 | - NET_ADMIN 219 | 220 | 221 | test: 222 | image: curlimages/curl 223 | network_mode: "service:wgcf" 224 | depends_on: 225 | - wgcf 226 | command: curl ipinfo.io 227 | 228 | 229 | 230 | 231 | 232 | 233 | 234 | 235 | Enable ipv6 only: 236 | 237 | 238 | 239 | version: "2.4" 240 | services: 241 | wgcf: 242 | image: neilpang/wgcf-docker:alpine 243 | volumes: 244 | - ./wgcf:/wgcf 245 | - /lib/modules:/lib/modules 246 | privileged: true 247 | sysctls: 248 | net.ipv6.conf.all.disable_ipv6: 0 249 | cap_add: 250 | - NET_ADMIN 251 | command: "-6" 252 | 253 | 254 | test: 255 | image: curlimages/curl 256 | network_mode: "service:wgcf" 257 | depends_on: 258 | - wgcf 259 | command: curl ipv6.ip.sb 260 | 261 | 262 | 263 | 264 | 265 | 266 | Enable ipv4 only: 267 | 268 | 269 | 270 | version: "2.4" 271 | services: 272 | wgcf: 273 | image: neilpang/wgcf-docker:alpine 274 | volumes: 275 | - ./wgcf:/wgcf 276 | - /lib/modules:/lib/modules 277 | privileged: true 278 | sysctls: 279 | net.ipv6.conf.all.disable_ipv6: 0 280 | cap_add: 281 | - NET_ADMIN 282 | command: "-4" 283 | 284 | 285 | test: 286 | image: curlimages/curl 287 | network_mode: "service:wgcf" 288 | depends_on: 289 | - wgcf 290 | command: curl ipinfo.io 291 | 292 | 293 | 294 | 295 | 296 | ``` 297 | -------------------------------------------------------------------------------- /entry.sh: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env bash 2 | 3 | set -e 4 | 5 | 6 | _downwgcf() { 7 | echo 8 | echo "clean up" 9 | if ! wg-quick down wgcf; then 10 | echo "error down" 11 | fi 12 | echo "clean up done" 13 | exit 0 14 | } 15 | 16 | 17 | 18 | #-4|-6 19 | runwgcf() { 20 | trap '_downwgcf' ERR TERM INT 21 | 22 | _enableV4="1" 23 | if [ "$1" = "-6" ]; then 24 | _enableV4="" 25 | fi 26 | 27 | 28 | if [ ! -e "wgcf-account.toml" ]; then 29 | wgcf register --accept-tos 30 | fi 31 | 32 | if [ ! -e "wgcf-profile.conf" ]; then 33 | wgcf generate 34 | fi 35 | 36 | cp wgcf-profile.conf /etc/wireguard/wgcf.conf 37 | 38 | DEFAULT_GATEWAY_NETWORK_CARD_NAME=`route | grep default | awk '{print $8}' | head -1` 39 | DEFAULT_ROUTE_IP=`ifconfig $DEFAULT_GATEWAY_NETWORK_CARD_NAME | grep "inet " | awk '{print $2}' | sed "s/addr://"` 40 | 41 | echo ${DEFAULT_GATEWAY_NETWORK_CARD_NAME} 42 | echo ${DEFAULT_ROUTE_IP} 43 | 44 | sed -i "/\[Interface\]/a PostDown = ip rule delete from $DEFAULT_ROUTE_IP lookup main" /etc/wireguard/wgcf.conf 45 | sed -i "/\[Interface\]/a PostUp = ip rule add from $DEFAULT_ROUTE_IP lookup main" /etc/wireguard/wgcf.conf 46 | 47 | if [ "$1" = "-6" ]; then 48 | sed -i 's/AllowedIPs = 0.0.0.0/#AllowedIPs = 0.0.0.0/' /etc/wireguard/wgcf.conf 49 | elif [ "$1" = "-4" ]; then 50 | sed -i 's/AllowedIPs = ::/#AllowedIPs = ::/' /etc/wireguard/wgcf.conf 51 | sed -i '/^Address = \([0-9a-fA-F]\{1,4\}:\)\{7\}[0-9a-fA-F]\{1,4\}\/[0-9]\{1,3\}/s/^/#/' /etc/wireguard/wgcf.conf 52 | fi 53 | 54 | 55 | modprobe ip6table_raw 56 | 57 | wg-quick up wgcf 58 | 59 | if [ "$_enableV4" ]; then 60 | _checkV4 61 | else 62 | _checkV6 63 | fi 64 | 65 | echo 66 | echo "OK, wgcf is up." 67 | 68 | 69 | sleep infinity & wait 70 | 71 | 72 | } 73 | 74 | _checkV4() { 75 | echo "Checking network status, please wait...." 76 | while ! curl --max-time 2 ipinfo.io; do 77 | wg-quick down wgcf 78 | echo "Sleep 2 and retry again." 79 | sleep 2 80 | wg-quick up wgcf 81 | done 82 | 83 | 84 | } 85 | 86 | _checkV6() { 87 | echo "Checking network status, please wait...." 88 | while ! curl --max-time 2 -6 ipv6.google.com; do 89 | wg-quick down wgcf 90 | echo "Sleep 2 and retry again." 91 | sleep 2 92 | wg-quick up wgcf 93 | done 94 | 95 | 96 | } 97 | 98 | 99 | 100 | if [ -z "$@" ] || [[ "$1" = -* ]]; then 101 | runwgcf "$@" 102 | else 103 | exec "$@" 104 | fi 105 | 106 | 107 | --------------------------------------------------------------------------------