집에 있는 서버 PC를 업그레이드했다.
정확히는 더 좋은 사양의 PC를 하나 둔 것이고,
기존 서버 PC는 홈 서버로서 세컨드로 두고 있다.
문제는 인터넷 회선은 하나인데 두 개를 같이 연결하려는 것!
메인 PC는 랜이 꽂혀있고, 세컨드와 메인은 크로스 케이블로 연결하여 내부 아이피로 잡아 둔 상태다.
문제는 외부에서 세컨드 PC에 접속하는 것인데…
아파치는 프락시를 이용하여 넘겨주면 되지만 기타 서비스는 그러한 방식들이 어렵다.
그렇다고 포트를 이용해서 포워딩 하고 싶은 생각은 그다지 없고…
여하튼 현재 상황에서 PC를 원활하게 연동하는 것은 다소 무리가 있다.
직접 DNS 서버를 꾸리지 않는 이상은 말이다.
이번에 포스팅할 내용은 VPN에 대한 것이다.
VPN으로 네트워크에 접속하여 내부 IP로서 PC들을 제어할 수 있도록 할 것이다.
먼저 VPN을 얘기하자면 복잡하게 얘기할 것 없이, 네이버의 용어 사전을 인용하여
VPN (virtual private network : 가상 사설망)
‘인터넷망과 같은 공중망을 사설망처럼 이용해 회선 비용을 크게 절감할 수 있는 기업통신 서비스를 말한다.‘
이런 느낌인데… 음.. 개념은 어렵지 않으니 쉽게 이해할 수 있을 것이다.
이 글을 본 사람은 어차피 대부분 알고 접근한 것일 테니, 본론으로 들어와 본격적인 설치를 진행하겠다.
참고로 운영체제 환경은 Centos7이다.
타 버전에선 확인해보지 못했다.
먼저 repository를 추가한다.
$ yum install epel-release
이후 openvpn과 easy-rsa를 설치할것이다.
$ yum install openvpn easy-rsa -y
설치가 끝나면 다음으로 할 것은 기본적인 openvpn 세팅이다.
# config 파일을 복사 한다. $ cp /usr/share/doc/openvpn-*/sample/sample-config-files/server.conf /etc/openvpn # conf파일 수정 $ vi /etc/openvpn/server.conf # 하단의 내용을 주석 해제 한다. (; 제거) ;push "redirect-gateway def1 bypass-dhcp" # 하단의 내용을 주석 해제 하고 값을 세팅한다. (주소는 하단의 내용 참고) ;push "dhcp-option DNS 208.67.222.222" ;push "dhcp-option DNS 208.67.220.220" # 유저와 그룹 주석 해제 ;user nobody ;group nobody # 로그가 쌓이길 원한다면 하단 주석 해제후 경로 지정 (필자는 /var/log/openvpn/openvpn.log로 지정하고 /var/log/openvpn 디렉토리를 생성 하였다) ;log openvpn.log ;log-append openvpn.log
상단의 내용에 보면 DNS 부분을 작성하는 부분이 있는데, 이곳은 자신의 인터넷 통신사의 DNS를 집어넣으면 된다.
만약 자체적으로 DNS 서비스를 운영 중이라면 해당 주소를 넣으면 된다.
만약 그것도 다 모르겠다면 구글 DNS를 집어넣으면 된다.
KT olleh (올레; 구 QOOK(쿡)), KT DNS
기본 DNS 서버 주소 – 168.126.63.1
보조 DNS 서버 주소 – 168.126.63.2
SK Broadband (브로드밴드), SK DNS
기본 DNS 서버 주소 – 210.220.163.82
보조 DNS 서버 주소 – 219.250.36.130
LG U+(유플러스; 구 XPEED 파워콤), LG DNS
기본 DNS 서버 주소 – 164.124.107.9
보조 DNS 서버 주소 – 203.248.242.2
Google Public (구글 퍼블릭)
기본 DNS 서버 주소 – 8.8.8.8
보조 DNS 서버 주소 – 8.8.4.4
여기까지 왔으면 기본적인 설치와 세팅은 끝이 났고,
가장 중요한 키를 제작하는 작업을 들어갈 것이다.
키 생성 이전에 사전 작업 준비를 한다.
# 디렉토리 생성 및 파일들을 easy-rsa 관련 복사한다 $ mkdir -p /etc/openvpn/easy-rsa/keys $ cp -rf /usr/share/easy-rsa/2.0/* /etc/openvpn/easy-rsa
그리고 보다 생성을 편하게 키에 관련된 속성값들을 미리 세팅해둔다.
하단의 EMAIL부분이나 ORG부분은 자신에게 맞춰 작성하도록 한다.
$ vi /etc/openvpn/easy-rsa/vars ... export KEY_COUNTRY="KR" export KEY_PROVINCE="NA" export KEY_CITY="Seoul" export KEY_ORG="example.com" export KEY_EMAIL="admin@example.com" export KEY_OU="Community" # X509 Subject Field export KEY_NAME="server" ... # 참고용, 무시 바람export KEY_CN=openvpn.example.com...
이제 키를 빌드 할 것이다.
먼저 준비 작업
#config 파일을 복사 세팅 한다. $ cp /etc/openvpn/easy-rsa/openssl-1.0.0.cnf /etc/openvpn/easy-rsa/openssl.cnf # 경로 이동 $ cd /etc/openvpn/easy-rsa # 소스 타겟 지정 $ source ./vars # 키 파일이 생성될 디렉토리를 비운다. $ ./clean-all
키 생성작업 시작, 먼저 ca 빌드, 대략 엔터만 쳐주면 된다.
$ ./build-ca #대략 아래의 문구들이 지나간다. Generating a 2048 bit RSA private key ............................................+++ .......................................+++ writing new private key to 'ca.key' ----- You are about to be asked to enter information that will be incorporated into your certificate request. What you are about to enter is what is called a Distinguished Name or a DN. There are quite a few fields but you can leave some blank For some fields there will be a default value, If you enter '.', the field will be left blank. ----- ... Country Name (2 letter code) [KR]: ...
다음은 서버 키를 빌드 할 것인데, 여기서 중요한 것! 무의식적으로 엔터만 칠 수가 있는데,
끝에 나오는 질문에 대해 y를 쳐줘야 커밋이 된다.
# 서버 빌드 $ ./build-key-server server # 대략 내용 지나감 ... # 여기서 y를 쳐주어야 한다! Certificate is to be certified until Aug 27 10:38:03 2025 GMT (3650 days) Sign the certificate? [y/n]:y # 여기서도 마찬가지 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated
생성한 키들을 토대로 dh를 빌드 한다.
$ ./build-dh # 대략 길고 긴 작업 진행이 흐른다. Generating DH parameters, 2048 bit long safe prime, generator 2 This is going to take a long time .............
생성한 키들을 openvpn 루트 디렉터리에 복사해두자.
# 이동 및 복사 $ cd /etc/openvpn/easy-rsa/keys $ cp dh2048.pem ca.crt server.crt server.key /etc/openvpn
다음은 클라이언트 연결을 위해 키를 생성하자.
클라이언트도 서버와 마찬가지로 마지막 질문에 y를 답해야 커밋 한다.
# 다시 경로 이동 $ cd /etc/openvpn/easy-rsa # 빌드 $ ./build-key client # 서버 키 생성과 같다. y를 눌러 완료 Certificate is to be certified until Aug 27 10:38:03 2025 GMT (3650 days) Sign the certificate? [y/n]:y 1 out of 1 certificate requests certified, commit? [y/n]y Write out database with 1 new entries Data Base Updated
기본적인 키 생성은 모두 끝이 났다.
이제 외부에서 접속하여 진입할 시 특정 네트워크로 연동시킬 라우팅 작업을 들어갈 것이다.
여기서 두가지 선택지가 존재한다.
먼저 firewalld를 비활성화 시키고 iptables를 사용하는 방법
# iptable을 설치 한다. $ yum install iptables-services -y # 서비스 관련 세팅을 한다. $ systemctl mask firewalld $ systemctl enable iptables $ systemctl stop firewalld $ systemctl start iptables $ iptables --flush # 포워딩 규칙 생성 $ iptables -t nat -A POSTROUTING -s 10.8.0.0/24 -o eth0 -j MASQUERADE # iptables 세팅값 저장 $ iptables-save > /etc/sysconfig/iptables # 포워드 활성화 $ vi /etc/sysctl.conf net.ipv4.ip_forward = 1
그리고 firewalld를 그대로 사용하는 방법
# 서비스 등록 $ firewall-cmd --permanent --add-service openvpn # vpn의 어뎁터인 tun0으로 zone 생성 및 속성 설정 $ firewall-cmd --permanent --zone=trusted --add-interface=tun0 $ firewall-cmd --permanent --zone=trusted --add-masquerade # 변수 설정 $ DEV=$(ip route get 8.8.8.8 | awk 'NR==1 {print $(NF-2)}') # 기본 이더넷에 연결 (만약 !! 특정 어뎁터에 연결을 시키고 싶다면 끝부분 -j 앞에 -o eno2 식으로 어뎁터를 지정) $ firewall-cmd --permanent --direct --passthrough ipv4 -t nat -A POSTROUTING -s 10.8.0.0/24 -o $DEV -j MASQUERADE # 설정값 리로드 $ firewall-cmd --reload
포워딩 세팅이 끝났으니 서비스를 재시작 하자
$ systemctl restart network.service
vpn 서비스 등록 및 서비스를 시작한다.
$ systemctl -f enable openvpn@server.service $ systemctl start openvpn@server.service
이것으로 설치가 모두 끝이 났다.
여기까지 완료한 후 openvpn 클라이언트를 이용해 접속하면 되는데
먼저 프로그램을 다운받고 설치 한다.
해당 프로그램은 https://openvpn.net 에 있으니 다운받으면 된다.
윈도우 버전은 내서버에 업로드 후 링크를 걸어 두겠다.
최신 버전을 원한다면 직접 홈페이지에 접속하여 받길 바란다.
XP (x86)
XP (x64)
Vista and later (x86)
Vista and later (x64)
설치가 끝났다 가정하고 진행 하겠다.
우선 서버로부터 클라이언트 키를 복사 해온다. 키들은 아래 위치에 있다.
sftp나 ftp 등등을 이용하여 복사 해오면 된다.
/etc/openvpn/easy-rsa/keys/ca.crt
/etc/openvpn/easy-rsa/keys/client.crt
/etc/openvpn/easy-rsa/keys/client.key
그리고 client.ovpn을 생성한다.
이는 서버로 접속하는데 사용되는 세팅값들이다.
메모장등을 이용하여 작성하면 된다.
client dev tun proto udp remote webshare.co.kr 1194 resolv-retry infinite nobind persist-key persist-tun comp-lzo verb 3 ca ca.crt cert client.crt key client.key
이후 client.ovpn 파일과 키 파일들을 openvpn 설정 디렉토리에 넣어 둘 것이다.
해당 폴더는 아래와 같다.
Windows : C:\Program Files\OpenVPN\config
MacOS : ~/Library/Application Support/Tunnelblick/Configurations
Linux : openvpn –config ~/path/to/client.ovpn (client.ovpn 경로)
이후 클라이언트를 실행하면 된다.
참고로 윈도우 비스타 이상에서는 마우스 우측버튼을 클릭하여 관리자모드로 실행하여야 한다.
위 작업들이 끝났으니 한번 접속 해보자
글이 길어졌는데, 사실 설치나 세팅은 전혀 어려운 게 없다.
상황에 따라서 VPN은 상당히 유용한 기능으로서 많은 편리함을 준다.
비용적인 부분에서도 아주 경제적이라고 할 수 있다.
나와 같이 고민하고 있는 사람에게 도움이 되길 바라며 글을 써본다.
굳이 외부에서 접속할 필요가 없는 경우 사용하면 괜찮다.
키를 이용해서 접근한다는 것만으로도관리만 잘하면 보안적인 부분에서 뚜렷단 장점이 존재한다.
궁금한 점은 댓글 바랍니다.
댓글 남기기