TrueNAS SoftEther VPN 설치하기

SoftEther VPN

일본에서 개발된 오픈 소스 VPN 프로그램입니다. 강력한 성능과 편의성 때문에 널리 사용되고 있습니다. 해당 프로그램에서 제공하는 무료 VPN Gate 기능 덕분에 ‘무료 VPN’으로도 많이 알려져 있습니다.

해당 프로그램을 TrueNAS 서버에 설치하여 VPN 서버를 구축해 보도록 하겠습니다.

 

VPN

VPN은 Virtual Private Network의 약자로, 클라이언트와 인트라넷을 인터넷을 통해 연결해주는 통신망입니다.

인트라넷은 흔히 ‘내부망’, ‘사내망’ 등으로 불립니다. 보안 등의 이유로 외부에서 접근할 수 없고, 내부에서만 접속할 수 있는 네트워크 망을 말합니다. 여러분의 집에 있는 인터넷 망도 쉽게 말하면 인트라넷 입니다. 아래와 같이

외부망 – 공유기 – 내부망(인트라넷)

의 구조를 띄기 때문이죠.

 

 VPN 서버의 필요성

직접 구축한 TrueNAS 서버는 유지보수가 필요합니다. 업데이트도 해 줘야하고, 어쩌다 에러가 발생하면 해당 문제를 해결해 주어야 하지요. 내부망에 항상 접근할 수 있는 상황이라면 딱히 필요가 없을 수도 있습니다. 그냥 서버와 연결된 공유기에 연결하던지 하면 접속할 수 있지요.

만약 내부망에 접속할 수 없는 상황이라면 어떨까요? 그럼 TrueNAS 서버에 관리를 위해 접속할 수 없게 됩니다. 따라서 이럴 때를 위해서 VPN 서버가 필요합니다.

하지만 여기서 ‘유지 보수를 위한 포트를 외부망과 포트포워딩을 해 놓으면 외부에서 접속할 수 있지 않느냐?’라고 반문할 수도 있습니다. 물론 그렇게 설정하면 외부망에서 내부망으로 해당 포트를 통해서 접속할 수 있습니다. 하지만 이것은 굉장히 위험한 선택입니다. 생각 외로 세상에는 해커들이 많고, 하루에도 수십번씩 공격이 들어옵니다. 이런 해커들에게 TrueNAS 서버의 통제할 수 있는 포트를 공개한다는 것은 좋은 생각이 아닙니다. 또한 TrueNAS의 기본 보안은 그리 좋은 편이 아니기도 하고요.

따라서 VPN 서버를 구축하여 외부에서 TrueNAS에 접속할 때 통과해야 하는 방어막을 하나 만든 것으로 생각할 수 있습니다. 이 방어막은 굉장히 튼튼하지요.

 

SoftEther VPN 설치하기

Dataset 만들기

System/Logs/SoftEtherVPN

SoftEther VPN이 작동하면서 많은 Log들을 만들게 되는데, 해당 로그를 저장할 dataset을 만들어 줍니다.

Compression이 gzip-9인지 확인해 주세요.

 

Jail 만들기

이번에는 추가로 설정해야 하는 부분이 있습니다. ADVANCED JAIL CREATION을 클릭하여 고급 설정으로 들어가 주세요.

이름은 SoftEtherVPN, Jail Type은 Basejail으로 설정해 주세요.

또한 Berkeley Packet Filter를 활성화 해 주세요. VPN 기능을 위해서 꼭 필요합니다.

 

Log 폴더 만들기

iocage console SoftEtherVPN

SoftEtherVPN Jail 내부로 접속해 줍니다.

mkdir -p /var/log/softether

Log가 저장될 폴더를 만들어 줍니다.

exit
iocage stop SoftEtherVPN

Jail에서 나간 후, Jail을 정지시킵니다.

 

마운트 포인트 설정하기

  • /mnt/System/Logs/SoftEtherVPN/var/log/softether

위와 같이 마운트 포인트를 설정해 줍니다.

그리고 다시 Jail을 시작해 주세요.

 

SoftEther VPN 프로그램 설치하기

iocage console SoftEtherVPN

Jail 내부로 들어가 줍니다.

pkg update && pkg upgrade

pkg를 업데이트 해줍니다.

pkg install softether

SoftEther VPN을 설치합니다. 이 글을 쓰는 기준으로 4.38 버전입니다.

SoftEther VPN에는 server, client, bridge가 모두 설치됩니다. 하지만 VPN 서버만 사용할 것입니다.

sysrc softether_server_enable="YES"

SoftEther VPN을 서비스 등록 해 줍니다.

service softether_server start

SoftEther VPN을 시작합니다.

 

SoftEther VPN 서버 설정하기

SoftEther VPN을 이용하려면 서버 설정을 완료해야 합니다. SoftEther VPN 서버 매니저 프로그램을 이용하여 설정을 진행하겠습니다.

여기를 클릭하면 서버 매니저를 공식 다운로드 페이지로 이동합니다.

  • Select Software에서 SoftEther VPN
  • Select Component에서 SoftEther VPN Server Manager for Windows
  • Select Platform에서 Windows
  • Select CPU에서 Intel (x86 and x64)

를 선택해 주시면 됩니다. AMD CPU를 사용하고 있더라고 문제 없이 작동되니 걱정하지 마세요.

다운로드한 프로그램을 실행하여 SoftEther VPN Server Manager (Admin Tools Only)를 설치해 주세요.

 

실행하면 위와 같은 화면이 뜹니다. New Setting을 클릭하여 서버를 추가합니다.

Setting Name원하는 이름으로 설정해 주시고, Host Name에는 SoftEtherVPN jail의 IP 주소를 입력합니다. 위는 설정 예시입니다.

그리고 OK를 눌러 완료합니다.

이제 위와 같이 설정한 Setting이 뜨게 됩니다. 방금 전에 만든 Setting을 선택하고, Connect를 눌러 서버에 접속합니다.

그럼 위와 같이 관리자 비밀번호를 설정하라는 창이 뜹니다. 충분히 복잡하게 설정해 주세요.

이제 본격적인 설정을 진행합니다.

서버 유형 설정

설정할 VPN 서버의 유형을 선택합니다. Remote Access VPN Server를 선택해 주세요. 그리고 Next를 누릅니다.

해당 유형으로 설정을 진행할 지 묻습니다. 를 눌러주세요.

허브 이름 설정

허브의 이름을 설정합니다. 원하는 대로 설정해 주세요.

DDNS 설정

SoftEther에서 DDNS 서비스를 제공하는데, DDNS 서비스를 설정하는 화면입니다. 자신의 도메인이 없다면 위와 같이 설정해도 되나, 이미 자신의 도메인이 있고, DDNS 서비스를 설정하였다고 가정하였기 때문에 추가적인 설정은 하지 않겠습니다. Exit를 눌러 빠져나옵니다.

L2TP 설정

L2TP 등을 설정하는 화면입니다. 해당 기능은 사용하지 않을 것이므로 OK를 누릅니다.

Azure 설정

마이크로소프트의 Azure 클라우드를 이용하여 VPN 연결을 릴레이 해주는 서비스입니다. 해당 서비스는 사용자가 방화벽을 직접 제어할 수 없을 때 사용합니다. 쉽게 말하면 공유기를 직접 제어할 수 없어서 포트포워딩 등을 하지 못할 때 사용합니다.

하지만 이번 포스팅에서는 그런 권한이 있다고 가정하였으므로 Disable VPN Azure를 선택하고 OK를 누릅니다.

유저 만들기

Create Users를 눌러 유저를 만듭니다.

아래와 같이 설정해 주시면 됩니다.

  • User Name에는 자기가 원하는 이름
  • Auth Type은 Password Authentication
  • Set Security Policy는 체크 해제
  • Password에 충분히 복잡한 암호를 입력

OK를 눌러 완료합니다.

그럼 위와 같이 유저가 생성된 것을 확인할 수 있습니다. Exit을 눌러 나갑니다.

로컬 브릿지 설정

떠 있던 창으로 돌아오면 Step 3. Set Local Bridgeepair0b와 같은 네트워크 어댑터가 떠 있을 것입니다. 해당 네트워크 어댑터를 선택하고 Close를 눌러 설정을 완료합니다.

실수로 창을 닫았다면 아래의 단계를 따라 주세요.

Local Bridge Setting을 클릭해 주세요.

Virtual Hub에서 아까 만들었던 허브를 선택합니다. 그리고 LAN Adapter적절한 네트워크 어댑터가 선택되어 있는지 확인하고, Create Local Bridge를 누릅니다.

그럼 위와 같은 창이 뜰 텐데, 확인을 눌러 계속합니다.

그럼 이제 위와 같이 로컬 브릿지가 생성된 것을 확인할 수 있습니다. 만약 Status에 Error나 Disable과 같이 Operating이 아닌 문구가 나타난다면 설정을 제대로 한 것인지, SoftEther VPN jail을 생성하는 과정에서 Berkeley Packet Filter을 켰는지 확인해 주세요.

Exit을 눌러 창을 닫습니다.

초기 설정이 끝나고 메인 화면으로 돌아오게 됩니다.

추가적인 설정을 진행하겠습니다.

청취 포트 설정

VPN 연결을 이용할 포트를 설정합니다. 해당 SoftEther VPN 서버에서는 OpenVPN, SoftEther VPN, SSTP 연결을 사용하여 VPN에 접속할 것이므로 TCP 443 포트만을 사용하겠습니다.

Management of Listeners에서 TCP 443만 남기고 나머지는 모두 Delete 해주시면 됩니다.

보안 설정

Encryption and Network를 눌러 보안 설정으로 들어갑니다.

Encryption Algorithm Name을 보면 AES128-SHA가 기본적으로 설정되어 있습니다. 하지만 해당 알고리즘은 그리 보안성이 좋지는 않습니다.

ECDHE-RSA-AES256-GCM-SHA384같이 매우 강력한 암호화 알고리즘을 선택하시는 것이 좋습니다. 물론 연산량이 더 늘어나기는 하나, 체감할 정도로 느려지거나 하지는 않습니다.

서버 인증서 설정

Server Certificate Settings에서 서버가 사용할 인증서를 설정하여야 합니다.

인증서를 만들거나 Import를 통해 만들어진 인증서를 추가할 수 있습니다.

TrueNAS 사설 인증서 만들기를 참고하셔서 SoftEther VPN 서버가 사용할 사설 인증서를 만들어 주세요.

VPN에 접속하기 위해서 vpn.example.net이라는 도메인을 사용한다고 가정하겠습니다.

vpn.example.net의 10년짜리 사설 인증서를 발급해 주세요. 발급한 인증서는 Export CertificateExport Private Key를 눌러서 다운로드 합니다.

VPN 매니저에서 Import를 눌러 CertificatePrivate Key를 순서대로 등록합니다.

그 후 OK를 눌러 설정을 완료합니다.

OpenVPN, SSTP 설정

OpenVPN / MS-SSTP Setting을 클릭합니다.

기본적으로 OpenVPN과 SSTP는 활성화 되어 있습니다. OpenVPN의 UDP 포트만 변경하도록 하겠습니다.

UDP 1194 포트UDP 443 포트로 변경해 주시고, OK를 눌러 완료해 주세요.

DDNS 비활성화

SoftEther VPN jail의 console에 접속해 주세요.

service softether_server stop

SoftEther VPN 서비스를 중단시킵니다.

cp /var/db/softether/vpn_server.config /var/db/softether/vpn_server.config.backup

서버 설정을 백업합니다.

vi /var/db/softether/vpn_server.config

서버 설정 파일을 엽니다.

(......)
declare root^M
{^M
        uint ConfigRevision 28^M
        bool IPsecMessageDisplayed true^M
        string Region KR^M
^M
        declare DDnsClient^M
        {^M
                bool Disabled true^M
(......)

declare DDnsClient 부분의 bool Disabled falsetrue로 변경해 줍니다.

저장하고 나와 주세요.

service softether_server start

SoftEther VPN 서버를 시작해 줍니다.

이제 SoftEther VPN Server 매니저를 이용하여 VPN 서버에 로그인 하면 아래와 같이 Dynamic DNS SettingVPN Azure Setting이 비활성화 되어 있는 것을 확인할 수 있습니다.

rm /var/db/softether/vpn_server.config.backup

서버가 이상 없이 정상적으로 동작한다면, 아까 백업해 두었던 설정 파일을 제거해 주세요.

관리자 IP 설정

기본적으로 누구나 SoftEther VPN 관리자 연결을 할 수 있습니다. 따라서 모르는 사람이 자신의 VPN 서버의 관리자 연결을 시도할 수 있습니다.

이를 방지하기 위해서 관리자 접속이 가능한 IP를 제한하겠습니다. 관리자에 접속할 IP만 화이트리스팅 하는 것이지요.

SoftEther VPN 서버 jail의 console에 접속해 주세요.

vi /var/db/softether/adminip.txt

adminip.txt 파일을 생성한 뒤

192.168.122.0/24

관리자 접속에 사용할 IP 대역을 입력해 주세요. 저의 경우 192.168.122.0/24 대역에서만 접근이 가능합니다.

 

포트포워딩 하기

VPN에 접속할 포트를 설정해 줍니다. 원하는 외부 포트의 UDP와 TCP를 모두 SoftEther VPN 서버 jail의 IP와 포트포워딩 해 주세요.

기본적으로 443 포트는 HTTPS 연결을 위해 사용되므로 추후의 웹 서버 구축을 위해 남겨두고, 다른 포트를 사용해 주세요. 저의 경우 1443 포트를 사용하겠습니다.

SoftEtherVPN jail의 TCP, UDP 443번 포트 ↔ 외부망의 TCP, UDP 1443번 포트

 

DDclient 도메인 추가

DDclient에 VPN 접속에 사용할 도메인을 추가해 줍니다.

DDNS 설치하기를 참고해서 도메인을 DDclient 설정 파일에 추가해 주세요.

 

마무리하며

VPN에 접속하는 방법은 인터넷에 많이 나와있으므로 생략하도록 하겠습니다. 설치나 설정 중 안되는 부분이 있다면 댓글로 편하게 물어봐 주세요.

이로써 VPN이 구축되었습니다. 해당 VPN은 TrueNAS 관리용으로 사용할 수도 있지만, 내부망의 다른 컴퓨터를 외부에서 접근하는 데에도 사용할 수 있는 등 활용성이 무궁무진하니 잘 활용하시길 바랍니다.

답글 남기기