-
VPN 서버 구축 (L2TP IPsec) (우분투, Ubuntu 20.04 LTS)개발/서버(Sever) 2023. 4. 10. 07:33
0. 프롤로그
그동안 학부 졸업, 논문 작성, 해외출장, 국내출장, 발표 등에 치여 살던 주인장..
연구실에서 사용하던 VPN 서버가 죽었다.. 한동안 사용 안해서 서버가 죽은 사실을 알게 된건 한참 뒤..
빠르게 다시 사용할 임시 VPN 서버가 필요했다.
학교 IP에서만 다운로드 & 열람 가능한 자료가 많았다.. (ex. 논문, 제안서, 연구실 내부 자료)
1. VPN Protocol 비교
VPN에 사용되는 프로토콜은 크게 PPTP, L2TP, OpenVPN, SSTP, IKEv2 등 으로 나뉜다.
(요즘은 OpenVPN과 WireGuard 등 차세대 프로토콜도 등장하고 있다. 이쪽은 다음 기회에 다루려 한다.)이 글을 보는 당신도 구글링을 통해 VPN 서버 구축을 찾아보다 이곳에 오게 된 것이라면 PPTP와 L2TP가 가장 많이 사용되는 방식임을 알 수 있을 것이다.
다만, PPTP의 경우 보안 문제가 있어 Mac OS에서는 지원하지 않는 방식이다.
1) PPTP의 경우 Point-to-Point Tunneling Protocol로 인증 프로토콜의 문제를 포함한 여러 취약점이 존재하며, 해당 취약점을 보완하기 위해 PEAP-MS-CHAP v2와 같이 여러 방법이 나오기는 하나 Brute Force와 같은 공격에 약한 모습을 보인다.
암호화를 포함한 알고리즘의 복잡도가 낮아 속도가 빠르나 보안에 취약한 특징을 가진다.
2) L2TP/IPsec는 Layer 2 Tunneling Protocol / Internet Protocol Security 이다.
주로 PPTP의 업그레이드 버전으로 통용된다. (PPTP와 L2F 결합)
3) OpenVPN는 windows, MacOS 외 BSD 계열의 리눅스를 포함하여 여러 곳에서 사용이 가능하다는 장점과 높은 수준의 암호화 프로토콜을 제공한다는 장점을 가지고 있다.
4) IKEv2/IPsec 방식은 Internet Key Exchange Version 2 / Internet Protocol Security이며, IKEv2로 통용된다.
IKEv2는 Diffie-Hellman key 교환를 통해 네트워크 간 IPsec 터널을 생성하는데, IPsec 터널을 통해 암호화, 복호화 및 인증 작업을 한다.
요즘 나오는 최신 버전의 Windows, MacOS, ios, android 에서 모두 기본적으로 탑재되어 있다. (연결의 접근성이 좋음)
주로 VPN 사용량이 많은 서버 PC의 부화를 줄이기 위해 OpenVPN 대신 고려해볼만 하다.
2. 선택
제목에서와 같이 L2TP/IPsec 과 IKEv2/IPsec을 지원하는 VPN 서버를 구축하려한다.
(OpenVPN으로 제작했던 서버가 죽어버려서.. 오랫만에 새로 만드는거라 빠르게 만들 서버가 필요했음.. 조만간 OpenVPN으로 변경할 때, 추가로 글 작성 예정)난이도는 PPTP 방식 프로토콜이 가장 간단하나, MacOS를 사용하는 주인장은 사용 못한 점이 가장 큼
3. 설치
사용할 자료는 다음과 같다.
https://github.com/hwdsl2/setup-ipsec-vpn
해당 Git은 다음과 같은 환경에서 빠르게 설치 및 설정을 할 수 있도록 도와주는 shell 코드이다.
- 우분투 22.04, 20.04, 18.04
- 데비안 11, 10
- CnetOS 7, CentOS Stream9/8
- Rocky Linux & AlmaLinux 9/8
- Oracle Linux 9, 8, 7
- 아마존 리눅스 2
+ Docker 이미지, VM 이미지 등 도 제공되니 확인해보길 바란다.
++ 주인장은 우분투 20.04 LTS 버전에서 설치하였다.
3.1. Git Clone
$ git clone https://github.com/hwdsl2/setup-ipsec-vpn $ cd setup-ipsec-vpn $ vim vpnsetup.sh $ vim vpnsetup_ubuntu.sh #우분투 사용자만
* vpnsetup.sh 과 vpnsetup_본인운영체제.sh 중 택
** 주인장은 vpnsetup_ubuntu.sh로 진행
3.2. vpnsetup.sh 수정
(vpnsetup_ubuntu.sh 기준 26,27,28 줄)
YOUR_IPSEC_PSK='공유할 IPSEC 키 / 20글자 이상을 권장' YOUR_USERNAME='USER ID / 사용할 ID' YOUR_PASSWORD='USER PW / 사용할 PW'
우선 3줄을 수정합니다.
특히 IPsec_PSK는 공유 키로 중요하니 외워두시길 바랍니다.
3.3. create_vpn_config 수정 (넘어가도 됨)
이 챕터는 넘어가도 상관 없습니다. (L2TP 서브넷 마스크 및 vpn ip의 대역을 수정하기 위한 챕터 입니다.)
(vpnsetup_ubuntu.sh 기준 414 줄 부터)
create_vpn_config() { bigecho "Creating VPN configuration..." #무시 L2TP_NET=${VPN_L2TP_NET:-'192.168.0.0/24'} #vpn ip 대역 / Mask Bits 값 L2TP_LOCAL=${VPN_L2TP_LOCAL:-'192.168.@@.@@'} #현재 vpn 서버PC의 IP L2TP_POOL=${VPN_L2TP_POOL:-'192.168.@@.@-192.168.@@.@@@'} #제공 vpn ip 범위(대역) XAUTH_NET=${VPN_XAUTH_NET:-'192.168.0.0/24'} #IPsec vpn ip 대역 / Mask Bits 값 XAUTH_POOL=${VPN_XAUTH_POOL:-'192.168.0.230-192.168.0.250'}#제공 IPsec vpn ip 범위(대역) DNS_SRV1=${VPN_DNS_SRV1:-'8.8.8.8'} #dns1 / 구글 DNS DNS_SRV2=${VPN_DNS_SRV2:-'8.8.4.4'} #dns2 / 구글 DNS
복잡해 보이는데 쉽게 설명하면, 서버가 가질 본인의 IP, 제공할 IP 대역 및 DNS 서버를 설정해주는 것 이다.
L2TP_NET 뒤 IP 부분은 IP 클래스에 따라 제공 가능한 IP의 수가 달라진다.
(기본 설정은 192.168.0.0/24 에서는 254개의 IP가 사용가능)
L2TP_LOCAL의 IP 부분은 현재 VPN 서버 PC의 IP를 넣는 곳입니다. 이때, 내부에서 사용할 내부 IP를 작성 해주시면 된다.
L2TP_POOL은 VPN을 제공할 IP의 대역대를 설정할 수 있습니다. 위 예시에서는 192.168.@@.@ 부터 192.168.@@.@@@ 까지 IP가 자동으로 할당되게 된다.
XAUTH_NET은 IPsec의 ip 대역으로 L2TP_NET과 동일하게 설정하면 된다.
XAUTH_POOL 또한 L2TP_POOL과 동일하게 설정하면 된다.
마지막으로 DNS_SRV1과 DNS_SRV2는 본문에서는 구글 DNS를 사용하였으나, 다음과 같이 본인 통신사에 맞춰 설정한다.
KT
기본 DNS : 168.126.63.1보조 DNS : 168.126.63.2
LG
기본 DNS : 164.124.101.2
보조 DNS : 203.248.252.2
SKT
기본 DNS : 219.250.36.130
보조 DNS : 210.220.163.82
구글
기본 DNS : 8.8.8.8
보조 DNS : 8.8.4.4
3.4. 스크립트 실행
$ sh vpnsetup_ubuntu.sh #또는 $ ./vpnsetup_ubuntu.sh #실행이 안될 때 (권한 변경) $ chmod 777 vpnsetup_ubuntu.sh
3.5. 스크립트 실행 결과 특정 패키지를 찾을 수 없다는 오류가 발생했을 경우
+ wget -t 3 -T 30 -q -O /tmp/vpn.DrQUW/vpn.sh https://raw.githubusercontent.com/hwdsl2/setup-ipsec-vpn/master/vpnsetup_ubuntu.sh ## VPN setup in progress... Please be patient. ## Installing packages required for setup... + apt-get -yqq update + apt-get -yqq install wget dnsutils openssl iptables iproute2 gawk grep sed net-tools ## Trying to auto discover IP of this server... ## Installing packages required for the VPN... + apt-get -yqq install libnss3-dev libnspr4-dev pkg-config libpam0g-dev libcap-ng-dev libcap-ng-utils libselinux1-dev libcurl4-nss-dev flex bison gcc make libnss3-tools libevent-dev libsystemd-dev uuid-runtime ppp xl2tpd E: libcap-ng-utils 패키지를 찾을 수 없습니다 E: libnss3-tools 패키지를 찾을 수 없습니다 E: xl2tpd 패키지를 찾을 수 없습니다 Error: 'apt-get install' failed.
아마 이런 오류가 뜨는 사람이 있을거다..
주인장도 당황함;;원인은 간단했는데, 이전 서버가 죽고 새롭게 설치한 우분투 20.04는 저장소를 추가하지 않았다.
에러가 발생한 부분은 libcap-ng-utils , libnss3-tools , xl2tpd 패키지를 찾지 못하는 것이다.
그렇다 universe 저장소에서만 설치가 가능했다.
$ sudo add-apt-repository universe #universe 저장소 추가 $ sudo apt update
다음과 같이 universe 패키지 저장소를 추가해준 뒤, apt update를 통해 패키지를 인식 가능하다.
이후, 다시 스크립트를 실행하면 다음과 같은 화면이 뜰 것이다.
3.6. 스크립트 설치 결과
================================================ IPsec VPN server is now ready for use! Connect to your new VPN with these details: Server IP: "서버 공인 IP" IPsec PSK: "IPsec 공유 키" Username: "유저 ID" Password: "유저 PW" Write these down. You will need them to connect! VPN client setup: https://vpnsetup.net/clients ================================================ ================================================ IKEv2 setup successful. Details for IKEv2 mode: VPN server address: "서버 공인 IP" VPN client name: "client 이름" Client configuration is available at: /설치경로/vpnclient.p12 (for Windows & Linux) /설치경로/vpnclient.sswan (for Android) /설치경로/vpnclient.mobileconfig (for iOS & macOS) Next steps: Configure IKEv2 clients. See: https://vpnsetup.net/clients ================================================
4. (Port Forwarding) 포트 포워딩
포트 포워딩 방법은 생략하겠습니다.
IPsec을 사용하기 위해서는 UDP 포트 중 500번과 4500번을 vpn 서버로 포트 포워딩 해주면 됩니다.
5. 혹시나 싶어서 남김
참고로 ipsec과 xl2tpd는 운영체제 시작시 자동으로 실행되도록 세팅되어 있습니다.
유저 정보나 서버 관련 설정을 변경하게 되어 vpn 서비스를 재시작하기 위해서는 다음 명령어를 입력하면 됩니다.
$ sudo service ipsec restart $ sudo service xl2tpd restart
6. VPN 연결 방법 (Client)
https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/clients.md
공식 자료를 참고하길 바란다.