SoftEther VPN

This entry is part 33 of 48 in the series FreeNAS 서버 만들기

SoftEther VPN 소개

SoftEther VPN 은 일본 쓰쿠바 대학에서 개발한 VPN 프로그램입니다. 매우 다양한 프로토콜과 여러 가지 고급 기능을 지원합니다. 서버와 클라이언트 프로그램이 둘 다 있으며, 서버 관리 GUI 프로그램을 제공한다는 장점이 있습니다.

Dataset 만들기

System/Logs/SoftEther_VPN

SoftEther VPN 의 로그가 저장될 데이터셋을 만들었습니다. SoftEther VPN 은 로그가 꾀 많이 생기는 편입니다.

Jail 만들기

고급 설정으로 들어가서 만들어야 합니다.

이름은 SoftEther_VPN

네트워크 설정에서 Berkeley Packet Filter 를 활성화 해 줍니다. 이를 활성화 하지 않으면 로컬 브릿지 연결이 불가능합니다.

자동 시작도 켜 주세요.

마운트 포인트

iocage exec SoftEther_VPN mkdir -p /var/log/softether/

softether vpn 의 로그가 저장될 디렉토리를 만들어주고

iocage stop SoftEther_VPN

감옥을 정지시킨 다음

/mnt/System/Logs/SoftEther_VPN ↔ /var/log/softether/

마운트 해 주세요.

SoftEther VPN 설치하기

iocage console SoftEther_VPN

감옥으로 로그인 해 주세요.

최신 레포로 바꾸기

pkg 와 port – 레포 바꾸기‘ 를 참고하여 최신 레포로 바꿔 주세요.

필요한 패키지 설치

SoftEther VPN 은 FreeBSD 를 공식 지원합니다.

pkg install softether

현재 기준으로 4.29 버전입니다. softether5 라는 패키지도 있는데, 개발 버전을 의미합니다.

이를 설치하면 softether server, client, bridge 가 모두 설치됩니다. VPN 서버만 실행할 것이므로,

sysrc softether_server="YES"

서비스에 등록해 주고

service softether_server start

시작해 줍니다.

SoftEther VPN 서버 설정

VPN Server Manager

이제부터는 SoftEther VPN 서버 매니저 프로그램을 이용해서 GUI로 설정할 것입니다.

https://www.softether-download.com/en.aspx?product=softether

위 링크는 SoftEther 프로젝트에서 개발한 프로그램을 다운로드 받는 공식 페이지입니다.

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

를 선택하면 다운로드 링크가 나타납니다. 제일 첫번째 링크를 누르면 다운로드 됩니다.

다운로드 받은 프로그램을 설치한 후, SoftEther VPN Server Manager 프로그램을 실행합니다. VPN Server Mangaer 또는 vpnsmgr 이라는 이름의 프로그램을 실행하면 됩니다.

실행 후, New Setting 을 눌러 관리할 서버를 추가합니다.

Host NameSoftEther VPN 이 설치된 Jail의 IP를 입력합니다. 그 후 OK 를 눌러 저장합니다.

VPN 서버 설정

추가한 설정을 눌러 접속합니다.

VPN 서버 관리자 비밀번호 설정

그럼 아래와 같이 비밀번호를 입력하라는 메세지가 나타납니다.

SoftEther VPN 서버의 비밀번호를 설정하는 것입니다. VPN 서버 전체의 설정을 제어할 수 있는 관리자 비밀번호이니 충분히 복잡한 비밀번호를 설정하시길 바랍니다.

초기 설정 마법사

VPN 서버 유형

비밀번호를 설정하고 나면 VPN 서버 초기 설정을 위해 몇 가지 대화창이 나타납니다.

서버의 유형을 묻습니다. Remote Access VPN Server 가 만들고자 하는 서버의 유형입니다.

선택한 유형으로 초기 설정이 진행된다고 합니다. 예.

가상 허브 만들기

가상 허브의 이름을 설정하는 것입니다. 원하는 대로 설정하면 됩니다.

DDNS 설정

이 창은 SoftEther 에서 제공하는 DDNS 를 설정하는 것입니다. 만약 자신만의 도메인이 없다면 SoftEther VPN 에서 제공하는 softether.net 의 서브도메인을 이용해 DDNS 설정을 할 수 있습니다. 본 포스팅에서는 소유하고 있는 도메인이 있고, DDNS 설정을 했다는 가정 하에 진행할 것이므로 Exit를 눌러 따로 설정은 하지 않을 것입니다.

허나 DDNS는 여전히 사용중인 상태임으로 좀 있다가 DDNS의 사용을 중지 할 것입니다.

L2TP 설정

위 화면은 L2TP 나 Site-to-Site 연결을 위한 EtherIP/L2TPv3 설정을 하는 것입니다. 본 포스팅에서는 설정하지 않을 것입니다. OK 를 눌러 계속합니다.

Azure 설정

마이크로소프트 Azure 클라우드를 통해 VPN 연결을 릴레이 하는 것입니다. VPN 서버가 설치된 환경에서 포트를 열 수도 없고, NAT 통과 기능과 같은 방화벽 통과 기능이 모두 작동하지 않을 경우 사용할수 있는 기능입니다.

본 포스팅에서는 서버 관리자가 방화벽(공유기)의 설정을 제어할수 있다고 가정함으로 Disable VPN Azure 를 체크한 후 OK를 눌러 진행합니다.

유저 생성

유저를 만들고 로컬 브릿지 설정을 하는 것입니다. 먼저 유저부터 만들겠습니다. Create Users.

유저 생성에서는 다양한 설정이 가능합니다. 어떤 인증 방식으로 로그인 하게 할지, 보안 설정을 할지, 어떤 그룹에 속하게 할지 등 매우 상세한 설정이 가능합니다.

간단하게 admion 이라는 유저를 만들어 보겠습니다.

  1. 유저의 이름은 admion
  2. 인증 방식은 Password Authentication (암호 인증)
  3. 보안 설정을 하지 않고
  4. 적절한 암호를 입력해 준 다음
  5. OK를 눌러 생성합니다.

그럼 아래와 같이 ‘VPN’ 가상 허브의 유저 리스트가 나타납니다. admion 이라는 유저가 추가되었음을 알 수 있습니다.

유저 관리와 생성, 삭제 등은 가상 허브 관리에서 할 수 있습니다.

Exit 를 눌러 다음 단계로 진행하겠습니다.

로컬 브릿지 설정

Local Bridge 설정을 해 주어야 합니다. Jail을 적절하게 만들었다면 Local Bridge 목록에 epair0b 와 같이 네트워크 인터페이스가 나타날 것입니다.

  • Virtual HubVPN
  • LAN Adapterepair0b

선택후 Create Local Bridge 를 눌러 로컬 브릿지를 생성합니다.

올바르게 생성하였다면 위와 같이 나타나야 합니다.

만약 상태가 Error 이나 Disable 등으로 나타났다면 설정을 올바르게 하였는지, BPF 를 켠 것이 맞는지 확인해 보시길 바랍니다.

초기 설정 마법사가 끝나면 메인 화면이 나타납니다.

청취할 포트 설정

먼저 어떤 포트를 청취할지부터 설정하겠습니다. OpenVPNSoftEther VPN, SSTP를 사용할 것인데, 이들을 모두 443 포트에서 청취하도록 하겠습니다.

Management of Listeners 에서 TCP 443만 남기고 모두 지웁니다.

암호 강도 설정

그 후 Encryption and Network 로 들어갑니다. 암호화 설정과 네트워크 설정을 할 수 있습니다.

Encryption Algorithm Name 을 보면 AES128-SHA 로 되어 있습니다. 그다지 강력한 암호화 프로토콜은 아닙니다. 적절한 수준으로 올려 주시길 바랍니다.

ECDHE-RSA-AES256-GCM-SHA384 와 같은 강력한 암호화를 선택하는 것을 추천합니다. 강력한 암호 프로토콜을 사용한다 해도 성능 하락은 미비하거나 없는 편입니다.

인증서 설정

Server Certificate Setting 은 서버가 사용할 인증서를 설정하는 것입니다.

New를 눌러 사설 인증서를 만들거나 Import를 눌러 추가할 수 있습니다.

사설 인증서 발급하기‘ 를 참고하여 softether vpn 이 사용할 인증서를 만들어 주세요. 

vpn.example.com 의 10년짜리 사설 인증서를 만들었다고 가정하겠습니다.

Import를 눌러 생성한 vpn.example.com 사설 인증서를 추가하도록 하겠습니다.

올바르게 설정했다면 OK를 눌러 저장합니다.

OpenVPN 과 SSTP 설정

SSTPOpenVPN을 사용할수 있도록 설정하겠습니다. OpenVPN / MS-SSTP Setting 을 눌러 설정 페이지로 들어갑니다.

아마 OpenVPN 과 SSTP 는 기본적으로 활성화 되어 있을 것입니다. OpenVPN 의 UDP 포트만 바꾸어 주도록 하겠습니다. 1194를 443으로 바꾼 다음 OK를 눌러 저장합니다.

DDNS 비활성화

다음은 DDNS 를 비활성화 해 주도록 하겠습니다.

iocage console SoftEther_VPN

SoftEther VPN 감옥에 접속해 줍니다.

service softether_server stop

먼저 softether vpn 서버를 중지합니다.

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

설정 파일을 백업합니다.

vi /var/db/softether/vpn_server.config

설정 파일을 열어 줍니다. 설정 파일을 수정할 때에는 매우 주의하여야 합니다.

설정 파일에서 ddclare DDnsClient 블록의 bool Disabledtrue 로 바꾸어 줍니다.

(...)
declare root
{
(...)
  declare DDnsClient
  {
    #DDNS를 비활성화 해 줍니다.
    #bool Disabled false
    bool Disabled true
    (...)
  }
}
(...)

저장하고 나와 줍니다.

service softether_server start

SoftEther VPN을 시작해 줍니다.

그 후 vpnsmgr 로 VPN 서버에 로그인 해 보면 Dynamic DNS SettingVPN Azure Setting 이 비활성화 되어 있는 것을 알 수 있습니다.

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

서버가 정상적으로 동작하는 것을 확인했다면 백업한 설정 파일을 제거합니다.

관리자 IP 제한

기본 설정은 SoftEther VPN 관리자 엑세스를 누구나 할 수 있는 상태입니다. 이건 성가신 문제입니다. 설령 비밀번호를 알아내지 못해 관리자로 로그인 할 수 없다 해도 계속해서 로그인 시도가 들어 올 테니깐요.

이것을 방지하기 위해 SoftEther VPN 은 관리자 엑세스가 가능한 IP를 화이트리스팅 하는 기능을 제공합니다.

설정 방법은 매우 간단합니다. adminip.txt 에 허용하고자 하는 IP를 입력하면 됩니다.

iocage exec SoftEther_VPN vi /var/db/softether/adminip.txt

192.168.1.0/24

이제 192.168.1.0/24 대역에서만 softether vpn 에 관리자 엑세스가 가능합니다.

포트포워딩

이제 포트포워딩을 해 줍니다. 원하는 외부 포트의 udp 와 tcp 프로토콜을 모두 softether vpn 이 설치된 jail 의 ip 를 향하도록 포트포워딩 해 주세요.

이미 외부 포트 443은 웹 서버 용도로 사용중이니 8443으로 하겠습니다.

SoftEther VPN 감옥 443 포트 ↔ 외부 8443 tcp, udp 포트

DDClient 에 도메인 추가

DDclientvpn.example.com 을 추가해 줍니다.

DDclient 에 도메인을 추가하는 것은 ‘DDclient‘ 를 참고하시길 바랍니다.

윈도우 – SSTP 로 접속

SSTP 의 경우, 윈도우의 설정에서 구성할 수 있습니다.

  1. 설정 – 네트워크 및 인터넷 – VPN
  2. VPN 연결 추가를 누르고
  3. VPN 공급자Windows(기본 제공)
  4. 연결 이름은 원하는 대로. Admion 으로 하겠습니다.
  5. 서버 이름 또는 주소는 VPN 서버의 주소입니다. vpn.example.com:8443
  6. vpn 종류는 SSTP(Secure Socket Tunneling Protocol)
  7. 로그인 정보 입력은 사용자 이름 밎 암호
  8. 사용자 이름과 암호는 설정한 대로 해 줍니다.
  9. 그 후 내 로그인 정보 기억이 체크되어 있는지 확인한 다음
  10. 저장을 눌러 설정을 저장합니다.

하단 트레이 아이콘의 네트워크 를 누르면 VPN에 연결할 수 있는 옵션이 나타납니다.

“인증서 체인은 처리되었지만, 신뢰 공급자에 의해 신뢰되지 않는 루트 인증서에서 중지되었습니다.” 와 같은 에러가 표시되면서 연결되지 않는다면 인증서가 올바르게 설치되지 않은 것이므로, ‘사설 인증서 발급하기 – 클라이언트에 등록하기‘ 를 참고하여 사설인증서의 CA 인증서를 올바르게 등록해주시길 바랍니다.

윈도우 – SoftEther VPN Client

SoftEther VPN은 softether ssl-vpn 이라는 독자적인 VPN 프로토콜을 지원하는데, 눈여겨 볼 점은 https 프로토콜을 사요하기 때문에 방화벽 돌파에 매우 효과적이라는 겁니다. 심지어 대부분의 VPN 프로토콜이 차단되는 중국에서조차도 원할하게 작동합니다.

softether ssl-vpn 프로토콜은 SoftEther VPN Client 를 이용해 사용할 수 있습니다.

https://www.softether-download.com/en.aspx?product=softether

위 링크는 SoftEther VPN 에서 만든 프로그램을 다운로드 할 수 있는 공식 페이지입니다.

  • SoftEther VPN (Freeware)
  • SoftEther VPN Client
  • Windows
  • Inetel (x86 and x64)

를 선택한 다음 다운로드 받아 줍니다.

SoftEther VPN Client Manager 를 실행한 다음, Add VPN Connection 을 눌러 새 VPN 연결을 추가합니다.

  • Setting Name 은 이 설정의 이름입니다. Admion 으로 하겠습니다.
  • Host Name 은 서버의 주소입니다. vpn.example.com
  • Port Number8443
  • Virtual Hub NameVPN
  • Server Certificate Verification Option 에서 Always Verify Server Certificate 를 체크해 줍니다. 인증서를 검증하는 것인데, 중간자 공격을 막는데 도움을 줍니다.
  • User Authentication Setting 에서
  • Auth TypeStandard Password Authentication
  • 유저 이름과 비밀번호는 설정한 대로 입력해 줍니다.

모두 설정하면 위와 같습니다.

Advanced Setting of Communication 에서 Advanced Setting… 을 눌러 줍니다.

Number of TCP Connections 는 몇 개의 연결로 병렬 연결할지 묻는 것입니다. 최대 32의 세션으로 병렬 연결할 수 있습니다. 당연히 여러 개의 세션으로 접속할 수록 속도가 빨라집니다. 8~32 로 설정합니다.

그 후 OK를 눌러 저장합니다.

설정을 올바르게 추가했다면 SoftEther VPN Client Manager 에 앞서 만든 설정이 표시됩니다.

연결하고자 하는 설정을 더블클릭해 연결할 수 있고, 연결 된 상태에서 해당 설정에서 오른쪽 마우스를 눌러 Disconnect 를 선택해 연결을 끊을 수 있습니다.

SoftEtherVPN Client 는 현재 문제가 하나 있는데, DNS 유출 문제가 있습니다.

VPN 서버가 사용하는 DNS (technitium DNS) 와 클라이언트가 사용하고 있는 DNS 를 둘다 사용하게 되어, 광고가 차단될 때도 있고, 나타날 때도 있습니다.

안드로이드 – OpenVPN

20200528 수정
ovpn 파일의 클라이언트 인증서 부분을 삭제하였습니다.
제 착각으로 클라이언트 인증서가 들어가야 할 부분에 서버 인증서가 들어가 버렸습니다. 기존 vpn 인증서는 파기하고 VPN 연결 도메인을 바꾸는 것을 걸 추천드립니다.

OpenVPN의 경우 먼저 설정 파일을 만들어야 합니다. vpnmgr 으로 설정 파일을 만들 수도 있으나, 몇 가지 문제점이 있어 직접 만들도록 하겠습니다.

client
dev tun
#UDP 프로토콜로 접속하려 할 시, tcp를 udp로 바꾸어 주세요.
proto tcp
#자신의 서버 주소와 포트로 변경하세요
remote vpn.example.com 8443

cipher AES-256-CBC
auth SHA512

resolv-retry infinite
nobind
client
verb 3
auth-user-pass

tun-mtu 1500
tun-mtu-extra 32
mssfix 1450
persist-key
persist-tun
ping 15
ping-restart 0
ping-timer-rem
reneg-sec 0

sndbuf 393216
rcvbuf 393216
push "sndbuf 393216"
push "rcvbuf 393216"

pull
fast-io

#앞서 생성한 RootCA 인증서의 내용을 입력해 주세요.
<ca>
-----BEGIN CERTIFICATE-----
22fecefcc3d76292a2ac639b8e77b5dcdfc0ffdb6614a749328a9bd99a3ad2f9
32ba151908d168097e9035d7fbdb07dafddbca434bc3e34a6b13241a59badfa6
49e664f369a7b4a9d93a73a04cc70ae697c431d181736d691748846e176cd386
52f64c1ae5a6739aa2d80bb59638a2744040b976f6b88ff6551e811a34e69c49
5574d87dc2109228e662e60b58210b98b0619599f854ff24a35bbc86616f356f
ff369cf636ef06e724f7b5eed020bda4eda0a8cbe56be94950bf6421670c0f52
2577abe575962a652c01fec5581cc1ed849070be4c0497c6a01f78608545a014
d5212bd227b12094324278473c6e2aca1a44abf3c8cad4bcf90acce9f38c7fef
cb1f6eec3db3860066771e497030f183fb70ec5d2cd847c5f29c9ec028b2b01c
ff1f99eb6d52e8599f88fd2901b9167865af07cac00aa5fb154c60b70649f5bd
79f472c7d1c863530a8db623e5371dc5c9909f9a6804927447d3c8daba26582f
b6e719dc877552a514816a3a453a0a6adefced65c6a24b50beffb38a4b2ea4af
bf14435821f3f248f59f953d5977510451bd209ed803ae9dfb67ad23cee2beab
cb3692162a31ea1575daf8b515c4469407609b4a0ffae568f7759dd04fb9e80c
08697bfc4b41b461d07a132f812c4aa705c8ddd89b5ed65dd32b1fdb8f3255cb
6183ee70a9e741a5f333d13f7c03eaa275b2ffb4949f2666f258d026d0cf93fb
5cebbeef5a60cc02922b50597cef4984fe1256d1bba09a9d2ae71b664152f6ac
a1x4/
-----END CERTIFICATE-----

</ca>

위는 설정 파일 예제입니다.

안드로이드 폰으로 접속할 경우, 플레이 스토어에서 OpenVPN Connect를 다운로드 받은 다음, OVPN Profile 을 눌러 위에서 만든 설정 파일을 추가합니다. 그 후 설정한 계정과 비밀번호를 입력해 접속할 수 있습니다.

접속할 때 아래와 같은 메세지가 나타날 수 있습니다.

CONTINUE 를 눌러 연결해 주면 됩니다.

이러한 에러가 나타나는 이유는 SoftEther VPN 의 인증 방식이 비밀번호 인증, 인증서 인증, Radius 인증 등 다양한 방법이 있어 OpenVPN 클라이언트에서 인증서와 비밀번호 둘 다 요구하는 것으로 인식하기 때문입니다. 하지만 SoftEther VPN 에서 비밀번호 인증만 설정하였음으로, 비밀번호만 있으면 됩니다.

마치면서

그 후 확인해 보면 정상적으로 접속됨을 알 수 있습니다. DHCP 서버는 라우터의 것을 사용함으로 SoftEtherVPN 서버가 설치된 내부망과 동일한 대역의 IP를 사용합니다.

그래서 내부망의 서버와 연결하거나 technitium DNS 를 주 DNS로 쓰기 위해 추가적인 설정이 필요하지 않습니다.

모든 기본 설정이 끝났습니다. 유저를 새로 추가하거나, 해당 유저에게 속도 제한을 걸거나 접속제한을 한다던가 하는 것은 가상 허브 관리에서 할 수 있습니다. 새로운 허브를 추가해 Site-to-Site 연결을 할 수도 있습니다.

SoftEther VPN 는 고급 설정이 가능한 VPN 서버입니다. SoftEther VPN은 메뉴얼이 잘 만들어 져 있고, 포럼도 상당히 활성화가 잘 되어 있으니 읽어 보시는 것을 추천합니다.

SoftEther VPN 문서 페이지

SoftEther VPN 유저 포럼

시리즈 네비게이션<< TVHeadendSFTP 공유 >>

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다