도커&쿠버네티스

[Docker] 도커 VPN 컨테이너로 다른 컨테이너 트래픽 라우팅하기 ( feat.NordVPN )

초보 & 뉴비 2025. 5. 30. 22:52

VPN과 연결된 특정 컨테이너로, 다른 모든 컨테이너의 트래픽을 라우팅 하는 방법을 알아보자.

아래 글을 NordVPN 기준으로 작성되었다.


NordVPN 토큰 발급

요새 대부분의 서비스들은 "ID:PW" 방식은 웹 페이지 로그인할 때만 사용하고 외부에서 해당 서비스를 이용할 때는 API나 토큰을 발급하는데 이는 NordVPN도 마찬가지였다.

 

https://my.nordaccount.com/dashboard/nordvpn

접속 후 하단의 Get Access token 클릭

이메일 인증 후 발급되는 토큰 기록

 

 

VPN 컨테이너 빌드 및 실행

Dockerfile

FROM ubuntu:24.04

RUN apt-get update && \
apt-get install -y --no-install-recommends wget apt-transport-https ca-certificates && \
    apt-get install -y --no-install-recommends wget apt-transport-https ca-certificates && \ 
    wget -qO /etc/apt/trusted.gpg.d/nordvpn_public.asc https://repo.nordvpn.com/gpg/nordvpn_public.asc && \
    echo "deb https://repo.nordvpn.com/deb/nordvpn/debian stable main" > /etc/apt/sources.list.d/nordvpn.list && \
    apt-get update && \
    apt-get install -y --no-install-recommends nordvpn && \
    apt-get clean && \
    rm -rf /var/lib/apt/lists/*

ENTRYPOINT /etc/init.d/nordvpn start && sleep 5 && /bin/bash -c "$@"
CMD bash

빌드

docker build -t nord_vpn:latest .

 실행

docker run -it --hostname nord_bridge \
--sysctl net.ipv6.conf.all.disable_ipv6=0 \
--privileged \
--name nord_bridge nord_vpn:latest

방화벽 설정

- 아래 명령어는 '실행' 단계에서 실행 된 컨테이너 내부에서 실행해야 한다.

- 컨테이너 실행 후 초기에는 방화벽 정책에 의해 그 어떠한 서버와도 통신할 수 없다.

-- 다시 말하면 NordVPN 로그인 조차 불가능하다는 뜻

-- 따라서 최소한의 NordVPN과 통신할 수 있는 정책은 필요하다.

update-alternatives --set iptables /usr/sbin/iptables-legacy
iptables -A OUTPUT -d api.nordvpn.com -j ACCEPT && iptables -A OUTPUT -d downloads.nordcdn.com -j ACCEPT

NordVPN 로그인

- 아래 명령어는 '실행' 단계에서 실행 된 컨테이너 내부에서 실행해야 한다.

- 토큰 발급 단계에서 발급 받은 토큰을 사용한다.

nordvpn login --token token_goes_here

NordVPN 설정

- 아래 명령어는 '실행' 단계에서 실행 된 컨테이너 내부에서 실행해야 한다.

nordvpn set autoconnect enable # 자동 연결 활성화
nordvpn set analytics disable # 통계 정보 제공하지 않음
nordvpn set killswitch enable # 킬 스위치 활성화
nordvpn c uk # 영국 연결

여기까지 문제 없이 실행되었으면 생성 된 컨테이너는  다른 컨테이너의 트래픽을 받아서 VPN 을 통해 처리하게 되는 역할을 한다.


다른 컨테이너 트래픽 라우팅 하기 ( 예시: 우분투 )

VPN 컨테이너를 만들어 놨으니 이제 다른 컨테이너의 트래픽을 라우팅 시켜야 하는데, 이는 간단하게  `-net` 옵션으로 해결할 수 있다.

docker run -it --net=container:nord_bridge -d --name ubuntu_vpn ubuntu

 


오류 해결

resolv.conf 권한 오류

루트 편집 허용

chattr -i resolv.conf

 

파일 권한 재설정

chmod 777 resolv.conf