VPN은 Virtual Private Network의 약자로 해석해보자면 가상 사설망 이라고 하죠.
보통은 IP를 우회하거나 집밖의 컴퓨터와 같은 네트워크로 구성하려고 할 때 많이 사용합니다.

오늘은 우분투 18.04에 VPN 구축을 하려고 합니다.
제가 맥을 사용하고 있다보니 pptp 구성을 사용할 수가 없어서
Strongswan이라는 프로그램을 이용하여 IKEv2 구성을 항 예정입니다.

Home Assistant 설명과는 다르게 기본적인 사용법은 알고 있다라는 가정하에 적도록 하겠습니다.
(무작정 따라해도 되긴하겠지만… 아무것도 모르고 이걸 설명하기는 많이 어려워요.)

오늘 내용의 순서입니다.

  1. StrongSwan 설치
  2. 인증서 만들기 및 ipsec 설정하기
  3. 방화벽 설정하기
  4. 클라이언트 인증서 파일 생성
  5. (옵션) 맥에 직접 적용해 보기


1.  StrongSwan 설치

우선 strongswan을 설치해줍니다. 18.04 부터는 pki가 따로 분리 되었다고 하네요. strongswan-pki 도 같이 설치를 해줍니다.
$ sudo apt install strongswan strongswan-pki

2. 인증서 만들기

우선 인증서를 만들기 위해 디렉토리 생성부터 하고 퍼미션 설정을 합니다.
$ mkdir -p ~/pki/{cacerts,certs,private}
$ chmod 700 ~/pki
이제 인증서를 생성하고 정보를 입력하는 작업을 해줍시다.
2번째 줄의 [이름]에 인증서 이름을, 4번째 줄의 [서버주소또는IP]에는 주소나 IP를 입력해줍니다.
$ ipsec pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/ca-key.pem
$ ipsec pki --self --ca --lifetime 3650 --in ~/pki/private/ca-key.pem --type rsa --dn "CN=[]" --outform pem > ~/pki/cacerts/ca-cert.pem
$ ipsec pki --gen --type rsa --size 4096 --outform pem > ~/pki/private/server-key.pem
$ ipsec pki --pub --in ~/pki/private/server-key.pem --type rsa | ipsec pki --issue --lifetime 1825 --cacert ~/pki/cacerts/ca-cert.pem --cakey ~/pki/private/ca-key.pem --dn "CN=[IP]" --san "[IP]" --flag serverAuth --flag ikeIntermediate --outform pem > ~/pki/certs/server-cert.pem
이제 인증서를 ipsec 디렉토리에 복사해주고 ipsec의 이전 설정 conf 파일을 백업합니다. vi 나 nano 등을 이용하여 ipsec.conf 파일을 새로 만듭니다.
$ sudo cp -r ~/pki/* /etc/ipsec.d/
$ sudo mv /etc/ipsec.conf{,.original}
$ sudo vi /etc/ipsec.conf
아래 내용을 붙혀넣으세요.
leftid 항목의 @[서버주소또는IP]는 주소일 경우 @를 붙히고 ip일 경우 @를 빼줍니다.
ex) @www.daum.net , 127.0.0.1
config setup
charondebug="ike 1, knl 1, cfg 0"
uniqueids=no
conn ikev2-vpn
auto=add
compress=no
type=tunnel
keyexchange=ikev2
fragmentation=yes
forceencaps=yes
dpdaction=clear
dpddelay=300s
rekey=no
left=%any
leftid=@[IP]
leftcert=server-cert.pem
leftsendcert=always
leftsubnet=0.0.0.0/0
right=%any
rightid=%any
rightauth=eap-mschapv2
rightsourceip=10.10.10.0/24
rightdns=8.8.8.8,8.8.4.4
rightsendcert=never
eap_identity=%identity
파일 저장을 하고 ipsec.secrets 파일을 수정합니다.
$ sudo vi /etc/ipsec.secrets
아래의 내용을 추가합니다. ID 에는 vpn 로그인시 사용할 아이디, PASSWORD에는 비밀번호를 적습니다.
: RSA "server-key.pem"
ID : EAP "PASSWORD"
StrongSwan의 설정이 완료되었습니다. 서비스를 재시작 해줍니다.
$ sudo systemctl restart strongswan

3. 방화벽 설정

ufw 를 이용하여 방화벽 설정을 합니다.
우선 ssh 등록부터 하세요. 실수를 많이 하는 부분인데 이걸 먼저 해주지 않으면 ssh 접속이 안됩니다.
$ sudo ufw allow OpenSSH
$ sudo ufw enable
이제 vpn에 사용할 포트를 열어줍니다.
$ sudo ufw allow 500,4500/udp
이제 세부설정을 할 겁니다. 
그전에 현재 네트워크 어댑터 이름을 먼저 확인을 해줍니다.
$ ip route | grep default
다음과 같은 형태로 출력이 되는데 dev 와 proto 사이의 어댑터 이름 기억하세요. eth0 가 아닐 수도 있습니다.
default via 203.0.113.7 dev eth0 proto static
이제 /etc/ufw/before.rules 파일을 수정해 줍니다.
$ sudo vi /etc/ufw/before.rules
*filter 바로 위에 다음을 추가합니다. 중간중간 나오는 eth0는 위에서 나온 어댑터 이름으로 바꾸세요.
*nat
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -m policy --pol ipsec --dir out -j ACCEPT
-A POSTROUTING -s 10.10.10.0/24 -o eth0 -j MASQUERADE
COMMIT
*mangle
-A FORWARD --match policy --pol ipsec --dir in -s 10.10.10.0/24 -o eth0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1361:1536 -j TCPMSS --set-mss 1360
COMMIT
*filter ...
*filter 내용이 끝나는 바로 뒤에 다음 추가합니다.
...
:ufw-not-local - [0:0]
-A ufw-before-forward --match policy --pol ipsec --dir in --proto esp -s 10.10.10.0/24 -j ACCEPT
-A ufw-before-forward --match policy --pol ipsec --dir out --proto esp -d 10.10.10.0/24 -j ACCEPT
저장을 하고 이제 /etc/ufw/sysctl.conf 수정합니다.
$ sudo vi /etc/ufw/sysctl.conf
다음 두개는 주석을 제거해줍니다.
net/ipv4/ip_forward=1
net/ipv4/conf/all/accept_redirects=0
다음 두개는 추가해줍니다.
net/ipv4/conf/all/send_redirects=0
net/ipv4/ip_no_pmtu_disc=1
설정이 다 끝났습니다. 방화벽 재시작 합시다.
$ sudo ufw disable
$ sudo ufw enable

4. 클라이언트 인증서 파일 생성

다음 명령을 이용하여 클라인터 인증서 파일 ca-cert을 생성합니다.
$ cat /etc/ipsec.d/cacerts/ca-cert.pem >> ca-cert.pem
생성된 ca-cert.pem 파일을 원하는 클라이언트에 복사하여 사용하면 됩니다.

5. (옵션) 맥에 직접 적용해 보기

위에서 생성한 파일을 맥에 복사를 하고 더블클릭으로 인증서 등록을 합니다.
키 체인 접근 에서  들어가서 IP 보안(IPsec) 항상 신뢰 로 변경합니다.

<키 체인 접근 실행 화면>


네트워크 환경설정 들어가서 네트워크 추가를 합니다.
(인터페이스: VPN, VPN 유형: IKEv2)
연결설정에서 서버주소와 원격 ID 에 위에서 설정해준 vpn 서버 컴퓨터의 주소 또는 IP를 입력해줍니다.
(둘다 같아요.)
그리고 인증설정 들어가서 아이디 패스워드 입력하고 확인을 하면 설정이 완료됩니다.

연결을 눌러서 잘 되는지 확인해보세요.

16.04에서도 vpn 구성을 했었는데 이번 버전은 pki 가 따로 빠져나와서 그 부분만 조금 바꿔서 사용하면 됩니다.
이상 우분투 18.04 에서 vpn 서버 구성하는 방법이였습니다.


'리눅스' 카테고리의 다른 글

라즈베리파이2에 Retropie 설치  (0) 2015.08.31

+ Recent posts