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

 

이번 글에서는 네트워크 설정, 방화벽 설정(UFW) 후 OpenVPN 서버 서비스를 실행하는 것까지 다룹니다.

 

OpenVPN 서버를 설치한 컴퓨터의 네트워크 구성을 조정해야 합니다.


먼저, IP주소로 들어오는 패킷을 전달(forward)하게끔 설정할 겁니다.

 

▼ 에디터로 /etc/sysctl.conf 파일을 엽니다.

sudo nano /etc/sysctl.conf

 

net.ipv4.ip_forward=1 항목을 찾아 주석을 제거하고 저장+빠져나옵니다. 저는 주석을 빼고 옮겨적는 식으로 처리했습니다.

 

sudo sysctl -p 명령어를 입력하여 변경사항을 적용합니다(/etc/sysctl.conf 파일 다시 읽기).

 

다음은 방화벽 설정입니다.
방화벽은 OpenVPN 서버 앞단에서 작동합니다. 들어오는 모든 트래픽 중에서 OpenVPN 트래픽만 골라내어 OpenVPN 서버로 돌려주도록 세팅해야 합니다.

 

방화벽 프로그램은 UFW를 씁니다.

(배경지식 : [우분투 18.04 데스크톱] UFW 방화벽을 서비스 기반으로 설정해볼까? )

기존에 ufw 패키지를 설치하지 않았다면 sudo apt install ufw 라고 입력하여 설치합니다.

그리고 아래의 스크린샷을 참고하여 ufw 방화벽을 활성화합니다.

 

sudo ufw status verbose 는 상태 확인 명령어입니다. inactive 되었다고 나오네요(꺼짐).

sudo ufw allow 22/tcp 는 tcp 프로토콜의 22번 포트를 열겠다는 뜻입니다. SSH 연결용 포트를 지정합니다.

sudo ufw enable 은 ufw를 켜겠다는 뜻이겠지요?

(주의사항에 나왔듯이 ssh 연결이 끊길 수 있으니, 사전에 SSH 연결용 포트를 반드시 열어야 합니다.)

다시 sudo ufw status verbose 로 상태 확인을 해보면 22번 포트로 들어오는(IN) 신호가 허용된 것이 보입니다.

 

ip route list default(또는 ip route | grep default)라고 입력하여 현재 네트워크 인터페이스의 이름을 확인합니다. dev 뒤에 출력되는 문자열입니다. 스샷 기준으로는 ens4네요.

 

▼ 아래의 명령어를 입력하여 /etc/ufw/before.rules 파일을 엽니다.

sudo nano /etc/ufw/before.rules

(before.rules 파일에 나열된 규칙은 기존 UFW 규칙이 로드되기 전에 적용됩니다.)

 

▼ 아래 스샷을 참고하여 블록 지정한 내용을 끼워넣고 저장+빠져나옵니다.

(디지털오션 가이드 복붙. 직접 치기 힘들면 아래 첨부한 파일을 참고)

ens4는 위에서 파악했던 본인의 현재 네트워크 인터페이스명으로 바꾸세요.

10.8.0.0/8은 10.0.0.0부터 10.255.255.255까지의 IP범위를 CIDR로 줄여서 표현한 것 같은데,
약간의 버그를 동원한 표현인 것 같습니다. 코드 만든 사람 머리가 엄청 좋은 것 같아요.

before-rules-addon.txt
0.00MB

 

▼ 대단하다. OpenVPN IP대역을 바꿔도 상관없게끔 표현하다니.

 

https://www.ipaddressguide.com/cidr

▲ CIDR 계산기 주소(IPv4)

https://www.ipaddressguide.com/ipv6-cidr

▲ IPv6 CIDR 블록 계산기 주소

 

▼ 아래의 명령어를 입력하여 /etc/default/ufw 파일을 엽니다.

sudo nano /etc/default/ufw

 

▼ DEFAULT_FORWARD_POLICY="DROP" 항목을 찾은 다음, DROP을 ACCEPT로 바꾸고 저장+빠져나옵니다.

 

▼ /etc/openven/server/server.conf 파일에서 선언했던 포트번호를 엽니다.

저는 UDP프로토콜 1194번 포트였죠?

sudo ufw allow 1194/udp

(혹시라도 ssh용 포트(기본값 22)를 열지 않았다면 sudo ufw allow 22/tcp 라고 입력하여 엽니다.)

그리고 UFW를 끄고 다시 켜서 설정사항들을 반영합니다.

sudo ufw disable

sudo ufw enable

 

구글클라우드 VPS는 방화벽이 한단계 더 있습니다. 이것도 풀어줘야 합니다.
(가정용 인터넷회선 하단에 설치한 유무선공유기에서 포트포워딩 설정하는 것과 유사한 개념입니다.)
아래 스샷을 참고하여 접근합니다.

 

▼ 구글 클라우드 콘솔(https://console.cloud.google.com) - VPC 네트워크 - 방화벽. (+)방화벽 규칙 만들기.

 

▼ 아래 스샷을 참고하여 방화벽 포트 개방 규칙을 만듭니다.

틀린 부분이 있으면 지적해주세요. 고치겠습니다.

 

이것으로 네트워크 설정과 방화벽 설정이 모두 끝났습니다.

 

OpenVPN 서버 서비스를 추가하고, 시작하겠습니다.

 

▼ 아래의 명령어를 입력하여 OpenVPN Server 서비스를 추가합니다. 참고로 @server.service에서 server는 /etc/openvpn/server/server.conf 파일을 의미합니다. 그러므로 .conf 파일명을 다르게 바꾸었다면 아래의 명령어들에도 반영해 주어야 합니다.

sudo systemctl -f enable openvpn-server@server.service

( -f 옵션은 기존에 동일한 이름의 서비스가 있다면 덮어씌우는 기능을 합니다.)

 

▼ 아래의 명령어를 입력하여 OpenVPN Server 서비스를 시작합니다.

sudo systemctl start openvpn-server@server.service

(또는 sudo service openvpn-server@server.service start)

 

▼ 아래의 명령어를 입력하여 OpenVPN 서버 서비스가 활성화되어 있는지 확인합니다.

sudo systemctl status openvpn-server@server.service

▲ Active 항목이 active (running)으로 나와야 정상인데 activating에서 넘어가지 않습니다. 원인 파악 후 대처해야 합니다.

 

▼ server.conf 파일에서 log 옵션을 활성화한 뒤 sudo systemctl restart openvpn-server@server.service 명령어를 입력하여 로그를 생성했니다. 그리고 sudo nano /etc/openvpn/server/openvpn.log 명령어로 로그파일의 내용을 확인했습니다.

▲ /etc/openvpn/server/openvpn.log 파일. fatal error 위에 failed to find GID for group nobody 문구가 의심스럽습니다.

 

cat /etc/group 이라고 명령어를 입력하여 우분투 리눅스 그룹 확인을 해보니, nobody라는 그룹이 없었습니다. 가장 유사한 것이 nogroup 같았습니다.

 

▼ 그래서 server.conf 파일에서 group nogroup 으로 바꾸고...

 

▼ 서비스를 재시작했더니 active (running) 메세지를 볼 수 있었습니다.

작동 테스트 성공!

 

▼ openvpn.log 파일에도 경고(Warning), fail, fatal 같은 문제 증상이 없습니다. 잘 돌아가네요.

 

OpenVPN 서버 서비스는 재부팅을 하더라도 자동으로 시작됩니다. 따로 신경쓸 일이 없음.

 

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

 

※ 다음 글 : 구글 클라우드 플랫폼(GCP)에 OpenVPN 서버 구축(10) : client.conf 구성

반응형