openvpn 원격으로 켜고 끄기
포스트
취소

openvpn 원격으로 켜고 끄기

PRD의 데이터를 가져오기

문제를 해결할 키가 되는 데이터인데 중요도는 낮은 데이터를 가져와야 하는데 보안상 외부에서 DB에 접속하기 너무 번거로웠다. (vpn 켜고, ssh tunneling 하고..)

작업환경이 로컬 맥에서 서버에 접속해서 작업하는 방식인데 (tensorflow, torch의 세팅이 m1에서 너무 번거롭다…) 외부에서 작업시에도 vpn을 켜고 끌 수 있어야 했다. 즉 아래의 그래프와 같은 구조로 설정이되어있어야 했다.

graph LR
    subgraph dev
    A[mac] -->|ssh| B[server]
    end
    subgraph product
    B -->|vpn| C[(PRD db)]
    end


VPN 의 사용

찾아보니 openvpn 을 이용하면 CLI 환경에서도 vpn을 켜고 끌 수 있다고 해서 시도해보았다.

우선 openvpn을 설치해준다.

1
$ sudo apt-get install openvpn


openvpn을 이용하면 vpn 설정 파일도 가지고 있(을..)다. (*.ovpn 등..)

이 파일들을 /etc/openvpn 위치로 이동시켜준다.

1
$ cp ./* /etc/openvpn


openvpn에서 이 설정 파일을 읽기위해서 확장자를 변경해준다.

1
$ cd /etc/openvpn && mv ./test.ovpn ./test.conf


이제 아래와 같이 실행한다.

1
$ sudo openvpn test.conf

유저네임과 페스워드를 물어본다. (잘 입력해준다.)

잘 입력하면 아래와 같은 문구가 뜨면 끝!

1
Thu Jun  9 16:15:38 2022 Initialization Sequence Completed


ssh 터널링은 아래와 같이 할 수 있다.

1
$ ssh -f -p {ssh_tunnel_port} -i ~/.ssh/my_key.rsa {ssh_tunnel_username}@{ssh_tunnel_address} -L {local_set_port}:{DB_address}:{DB_port} -N -v

db는 아래처럼 local로 접근해 접속 가능하다 (여기서 local_set_port는 기존 로컬의 psql 포트와 겹치지 않게 설정해준다.)

1
$ psql -h 0.0.0.0 -U {DB_username} -p {local_set_port}


문제 발생

컨테이너에서 db 접속 불가

Container 안에서 db에 접속해보려고 하니 밖에서 접속할때랑 다르게 접속이 안되었다. (검색해서 나오는 대부분의 방법을 진행해보았다.)

단순하게 접속 key를 도커 볼륨으로 엮고 컨테이너 내부에서 ssh 터널링 해주니 잘된다… (이것때문에 몇시간을 날린건지..)

외부 망에서 접속하는 경우

내부망에서는 잘 접속 되었는데 외부 망에서 접속해서 vpn을 켜는 순간 접속이 안되었다.구조는 아래와 같다.

graph LR
		A[mac] -->|ssh| B[server]
    subgraph dev
    B
    end
    subgraph product
    B -->|vpn| C[(PRD db)]
    end

아래처럼 *.ovpn 파일에 라우팅 설정을 추가해서 ip가 바뀌더라도 접속할 수 있게 하였다.

1
2
# route ip/32 라우터 내부 IP
route {접속한 곳의 공인 ip} 255.255.255.255 192.168.0.1

라우팅 관련해서 자료조사가 필요해보인다. 참고 링크

너무 복잡하다

위 단계는 설정도 문제지만 막상 사용할때마다 세팅이 길어져서 불편했다. 혹시나 하는마음에 VPN 계정을 추가로 발급받아서 mac, server 모두 각각 vpn에 연결해보았다. 구조는 다음과 같다.

graph LR
		
    subgraph vpn_group [vpn]
    A[mac] -->|ssh| B[server]
    end
    style vpn_group fill:#ffdcb4,stroke:#ff7a11,stroke-width:1px
    subgraph product
    B --> C[(PRD db)]
    end

라우팅 설정없이 잘 동작한다… 휴…

네이버에서 이전한 포스트로 오래전 작성되어서 내용이 잘못되었을 수 있습니다. 오류나 잘못된 정보 전달시 댓글로 알려주세요!

이 기사는 저작권자의 CC BY 4.0 라이센스를 따릅니다.

python package 만들어서 사용하기 (2)

Docker container에서 cron을 이용한 스케줄링