안녕하세요!
이번 포스팅에서는 Portainer에서 Gluetun을 이용하여
Docker 컨테이너에 VPN을 연결하는 방법에 대해 알아보겠습니다.
Portainer에서 작업하는 게 편하므로
Portainer가 없으신 분은 이번 기회에 세팅하시기 바랍니다!
Portainer Stack 생성
먼저 Portainer에 접속하여 로그인합니다.

local을 클릭합니다.

Stacks를 클릭합니다.

Add stack를 클릭합니다.
Portainer YAML

이름을 입력합니다.

Web editor 부분에 아래 코드를 각자 환경에 맞게 수정하여 붙여 넣습니다.
version: "3.8"
services:
gluetun:
image: qmcgaw/gluetun:latest
container_name: vpn_gateway
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun:/dev/net/tun
ports:
# ▼ 여기에 연결할 모든 앱의 외부:내부 포트를 추가합니다. ▼
- "외부포트:내부포트/tcp" # 예: "3000:3000/tcp"
- "외부포트:내부포트/tcp" # 예: "8080:8080/tcp"
volumes:
# ▼ 실제 OVPN 파일이 있는 호스트 경로와 파일명으로 수정하세요.
- /volume1/docker/실제경로/ovpn파일:/gluetun/custom.ovpn:ro
environment:
- VPN_SERVICE_PROVIDER=custom
- VPN_TYPE=openvpn
- OPENVPN_CUSTOM_CONFIG=/config/openvpn/custom.ovpn
- OPENVPN_USER=실제이름
- OPENVPN_PASSWORD=실제비밀번호
# ▼ 여기에 연결할 새 앱의 내부 포트를 쉼표로 구분하여 추가합니다. ▼
- FIREWALL_VPN_INPUT_PORTS=내부포트 # 예: 3000,8080
- TZ=Asia/Seoul
restart: unless-stopped
첫번째서비스이름:
# ▼ 추가하려는 앱의 Docker 이미지 이름 및 태그
image: 이미지/이름:latest # 예: difegue/lanraragi:latest
container_name: 컨테이너이름 # 예: lanraragi_vpn
# ▼ 이 두 줄로 Gluetun에 연결합니다.
depends_on:
- gluetun # 위 gluetun 서비스의 이름과 동일해야 함
network_mode: "service:gluetun"
# ▼ 앱에 필요한 환경 변수 (앱 문서를 참조하여 설정)
# ▼ 앱에 필요한 볼륨 마운트 (앱 문서를 참조하여 설정)
restart: unless-stopped
두번째서비스이름:
# ▼ 추가하려는 앱의 Docker 이미지 이름 및 태그
image: 이미지/이름:latest # 예: linuxserver/qbittorrent:latest
container_name: 컨테이너이름 # 예: qbittorrent_vpn
# ▼ 이 두 줄로 Gluetun에 연결합니다.
depends_on:
- gluetun # 위 gluetun 서비스의 이름과 동일해야 함
network_mode: "service:gluetun"
# ▼ 앱에 필요한 환경 변수 (앱 문서를 참조하여 설정)
# ▼ 앱에 필요한 볼륨 마운트 (앱 문서를 참조하여 설정)
restart: unless-stopped
아래는 필자의 실제 예시입니다.
필자는 현재 LANraragi 하나만 연결했지만,
틀만 지킨다면 복수의 컨테이너를 연결하는 것도 가능합니다.
version: "3.8"
services:
gluetun:
image: qmcgaw/gluetun:latest
container_name: vpn_gateway
cap_add:
- NET_ADMIN
devices:
- /dev/net/tun:/dev/net/tun
ports:
# ▼ 여기에 연결할 모든 앱의 외부:내부 포트를 추가합니다. ▼
- "3000:3000/tcp"
volumes:
# ▼ 실제 OVPN 파일이 있는 호스트 경로와 파일명으로 수정하세요.
- /volume1/docker/gluetun/ovpn/protonJP.ovpn:/config/openvpn/custom.ovpn:ro
environment:
- VPN_SERVICE_PROVIDER=custom
- VPN_TYPE=openvpn
- OPENVPN_CUSTOM_CONFIG=/config/openvpn/custom.ovpn
- OPENVPN_USER=실제이름
- OPENVPN_PASSWORD=실제비밀번호
# ▼ 여기에 연결할 새 앱의 내부 포트를 쉼표로 구분하여 추가합니다. ▼
- FIREWALL_VPN_INPUT_PORTS=3000
- TZ=Asia/Seoul
restart: unless-stopped
lanraragi:
# ▼ 추가하려는 앱의 Docker 이미지 이름 및 태그
image: difegue/lanraragi:latest
container_name: lanraragi_vpn
# ▼ 이 두 줄로 Gluetun에 연결합니다.
depends_on:
- gluetun # 위 gluetun 서비스의 이름과 동일해야 함
network_mode: "service:gluetun"
environment:
- LRR_UID=1026
- LRR_GID=100
- LRR_NETWORK=http://*:3000
volumes:
- /volume1/docker/lanraragi/content:/home/koyomi/lanraragi/content
- /volume1/docker/lanraragi/database:/home/koyomi/lanraragi/database
restart: unless-stopped

모두 잘 입력했다면, 하단의 Deploy the stack을 클릭합니다.

좌측 메뉴에서 Containers에 접속하여
vpn_gateway와 추가한 컨테이너 (필자의 경우 lanraragi_vpn)가 healthy 상태로 존재하는지 확인합니다.


컨테이너 추가 방법

Stacks에서 gluetun_vpn을 클릭합니다.

Editor를 클릭합니다.


템플릿에 맞게 추가하거나 수정하고, 하단의 Update the stack을 클릭합니다.
이제 여러분은 Portainer에서 스택을 활용하여 Gluetun 컨테이너를 설정하고,
다른 컨테이너에 VPN을 연결할 수 있게 되었습니다.
필요에 따라 VPN 연결이 필요한 컨테이너를 쉽게 연결할 수도 있게 되었습니다.
오늘 배운 내용을 응용하여 qBittorrent에도 VPN을 연결해보시기 바랍니다.
감사합니다!
1 thought on “시놀로지 Docker에 VPN 연결하기 Gluetun 편”