이전 글(구글 클라우드 플랫폼(GCP)에 OpenVPN 서버 구축(9) : server.conf 구성)에 이어서 쓰는 글입니다.

 

지금까지 따라오셨다면 구글 클라우드 플랫폼(GCP)이나 홈서버에서 OpenVPN 서버 프로그램이 작동하고 있을 겁니다. 고생 많으셨습니다.

 

이번에는 client.conf 파일을 구성할 겁니다(이름을 base.conf로 바꾸어 구성.).
저는 client.conf 파일 내의 옵션들을 모르기 때문에 샘플 파일을 복사해서 수정하는 식으로 진행하겠습니다.

 

OpenVPN 2.5 버전(이상) 기준으로 설명하며, 2.5버전 미만에서 deprecated(도태)되거나 도태될 예정에 있는 옵션들은 사용하지 않습니다.

 

클라이언트 인증서 생성 과정에서 ~/client-configs/ 디렉토리를 만들었었는데, 그 아래에 files 디렉토리를 만듭니다.

 

mkdir -p ~/client-configs/files

 

OpenVPN 2.5.1 버전 소스를 /usr/local/src/ 경로에 압축을 풀었다면 아래의 경로에 client.conf 샘플 파일이 있습니다.

/usr/local/src/openvpn-2.5.1/sample/sample-config-files/client.conf

https://github.com/OpenVPN/openvpn 링크에도 /sample/sample-config/ 하위 경로로 들어가면 client.conf 파일이 보입니다. )

 

▼ 아래처럼 명령어를 입력하여
샘플 client.conf 파일의 이름을 base.conf로 바꾸어 ~/client-configs/ 경로에 복사합니다.

cp /usr/local/src/openvpn-2.5.1/sample/sample-config-files/client.conf ~/client-configs/base.conf

만약 우분투 20.04 LTS 데스크톱에 내장된 openvpn 패키지를 사용한다면 아래의 대체 명령어를 입력합니다.

sudo cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf

 

▼ 그리고 nano 에디터로 ~/client-configs/base.conf 파일을 엽니다. 수정할 거예요.

(nano ~/client-configs/base.conf)

 

base.conf 구성의 핵심은 주석을 보면서 눈치껏 대응하는 것입니다.
OpenVPN 버전이 다르면 base.conf의 항목이 바뀔 수 있기 때문에, 저의 설명은 보조용으로만 활용할 것을 권합니다.

(https://github.com/OpenVPN/openvpn/tree/master/doc의 man-sections 디렉토리 문서들을 참고했습니다.)

 

▼ 도입부 설명을 읽어두세요. 윈도우에서는 .open 변환 도구가 있다고 합니다.

(# 또는 ; 가 주석(코멘트) 표시인 것은 server.conf 때와 같습니다.)

 

▼ 나는 클라이언트다! 라고 적으랍니다. 기본값으로 client 라고 적혀 있었습니다. 통과.

(server.conf 파일에는 server 라고 적혀 있었지요?)

 

▼ 서버쪽 설정과 똑같이 맞추라고 합니다. /etc/openvpn/server/server.conf를 참고해서 맞춥니다.

저는 dev tun(기본값)이었습니다. 패스.

 

▼ dev-node 옵션도 server.conf 파일에서 설정하지 않았으므로, 여기서도 넘어갔습니다.

 

▼ porto 옵션은 TCP/UDP 프로토콜 중 어떤 것을 쓸건지 정하는 항목입니다. 저는 server.conf 설정처럼 porto udp(기본값)으로 설정했습니다.

 

▼ "remote [public IP주소] [포트번호]" 형식으로 적습니다. 포트번호는 server.conf에 적었던 것으로.

 

▼ 본인의 구글 클라우드플랫폼 서버 public IP주소(외부IP주소)를 모르겠다고요? 터미널창을 하나 더 띄우고 구글클라우드 플랫폼 서버에 접속한 다음, curl ifconfig.me 라고 치면 나옵니다.

(서버에 인터넷 회선이 직접 연결되어 있다면 ifconfig 또는 ip addr show 명령어 입력만으로 외부IP주소 조회가 되는데, 제가 구글 클라우드 플랫폼을 기본 상태(유동IP)로 사용해서 그런지 외부IP 주소가 안 나오더군요. 그래서 아래 링크의 팁을 활용해서 공인IP 주소를 알아낸 것입니다.)

 

https://zetawiki.com/wiki/리눅스_공인_IP_확인

 

구글 클라우드 플랫폼은 IP 고정이 유료 서비스라 부담스럽습니다. 그래서 "remote [public IP주소] [포트번호]" 형식으로 적으면 구글에서 IP주소를 바꾸는 조치를 취했을 때 OpenVPN 연결이 끊길 것입니다. 지금 구성하는 base.conf 파일도 못쓰게 되겠지요? 내부에 IP주소가 적혀 있으니까.

 

그래서 구글링 해봤더니 IP주소 대신 DDNS 주소를 적어도 된다고 하네요.

https://openvpn.net/community-resources/how-to/#running-an-openvpn-server-on-a-dynamic-ip-address

https://community.openvpn.net/openvpn/wiki/299-can-openvpn-handle-the-situation-where-both-ends-of-the-connection-are-dynamic

https://openvpn.net/community-resources/reference-manual-for-openvpn-2-4/

(아직 OpenVPN 2.5 버전의 레퍼런스 매뉴얼이 나오지 않아서, 2.4 버전용의 링크를 적습니다.)

 

▼ 그래서 "remote [DDNS 주소] [포트번호]" 형식으로 바꾸었습니다.
(무료 DDNS는 duckdns 썼씁니다. 구축 의뢰 원하시면 이메일 주세요.ㅋ)

▲ 그리고 #timeouts 주석 아래의 항목들을 추가하였습니다.(스크린샷 이후 ping 시간을 15초에서 150초로 변경. resolv-retry도 아래에 또 있더군요. 중복되면 안되니까 resolv-retry 300을 주석 처리.)

ping, ping-restart, resolv-retry 옵션들의 기능은 대충 짐작이 가시죠? 정확히 알고 싶으면 위에 적어둔 레퍼런스 매뉴얼 링크를 참고하세요.

 

※ 2021. 4. 24. 추가

▼ 작동 테스트 하면서 log파일 확인해 봤는데, 기본값으로 바뀌네요(ping 10, ping-restart 120). 그래서 base.conf 파일에 넣었던 #timeouts 항목들을 뺐습니다.

 

▼ remote-random 옵션. 로드밸런스 환경(OpenVPN 서버 여러대)에서 사용하는 고급 기능인 것 같습니다. 주석처리된 기본값 상태로 놔두었습니다.

 

▼ resolv-retry 옵션. 연결 재시도? infinite(무한대)가 기본값. 그대로 통과.

 

▼ nobind 옵션. Most clients don't need to bind to~~. 좋은 기능인 것 같습니다. 그대로 놔두었네요.

 

▼ server.conf 에서처럼 user nobody, group nogroup 으로 설정했습니다.

 

▼ server.conf 에서처럼 persist-key, persist-tun 옵션을 기본값대로 놔두었습니다(활성화).

 

▼ http-proxy-retry, http-proxy 옵션. 고급 기능이라 저같은 일반인이 쓸 일이 없습니다. 통과.

 

▼ mute-replay-warnings 옵션. 저는 노트북이나 스마트폰 와이파이(무선랜)를 클라이언트용으로 쓸 예정이라 주석을 해제했습니다.

 

▼ ca, cert, key 옵션을 주석처리했습니다. 그 이유는 나중에 ovpn 확장자 파일을 만들면서 인증서를 내장시킬 것이기 때문입니다.

 

▼ remote-cert-tls 옵션. 잘 모르겠습니다. 기본값(주석 해제)대로 놔뒀습니다.

 

▼ tls-auth 옵션을 주석처리 했습니다. ta.key 뒤에 붙은 숫자 1이 무력화되기 때문에 key-direction 1 옵션을 추가했습니다.

(이 설정은 문제가 생길 수 있습니다. 테스트 후 피드백 하겠습니다. => 문제 없음.)

 

▼ server.conf 구성과 cipher 옵션을 일치시켰습니다.

 

▼ 2021. 4. 23. 추가. /etc/openvpn/server/server.conf 파일의 내용을 바꾸면서 아래 스샷처럼 일치시켰습니다.

 

▼ 마지막 옵션들. verb, mute 옵션에 대한 설명은 server.conf 구성 글을 참고하세요.

 

▼ server.conf 파일에서 push "redirect-gateway def1" 옵션을 활성화하지 않았다면 base.conf 파일에 redirect-gateway def1 옵션을 추가합니다(둘 중 한군데에는 꼭 들어가야 합니다. base.conf 파일에는 push와 ""가 빠져요.). OpenVPN 서버쪽 게이트웨이를 사용함으로써 클라이언트의 IP를 서버의 IP로 바꾸는 기능을 합니다. 핵심 기능이니까 꼭 챙기세요.

 

▼ auth-nocache 옵션을 추가합니다. 그러면 접속 로그에서 아래의 WARNING(경고) 메세지를 없앨 수 있습니다.

WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this

 

▼ 마지막으로, 끝부분에 아래의 내용을 입력합니다. 리눅스OS가 OpenVPN 클라이언트가 될 때 필요한 사항입니다. (디지털오션 가이드 복붙. 직접 치기 힘들면 아래 첨부한 파일을 참고)

(대부분의 최신 리눅스 배포판은 systemd를 사용할 겁니다. 그래서 두번째 주석 영역(clients that use systemd-resolved)만 추가하더라도 큰 무리는 없을 거예요.)

end-of-line.txt
0.00MB

 

이것으로 OpenVPN의 client.conf(base.conf) 구성이 끝났습니다.

저장하고 빠져나오세요(nano에디터 단축키 Ctrl+X).

 

이후 과정은 다음 글에서 적겠습니다.

 

※ 다음 글 : 구글 클라우드 플랫폼(GCP)에 OpenVPN 서버 구축(11) : .ovpn 파일 생성

반응형