Microsoft MVP성태의 닷넷 이야기
개발 환경 구성: 492. 윈도우에 OpenVPN 설치 - 클라이언트 측 구성 [링크 복사], [링크+제목 복사],
조회: 19575
글쓴 사람
정성태 (techsharer at outlook.com)
홈페이지
첨부 파일
 

(시리즈 글이 4개 있습니다.)
개발 환경 구성: 491. 윈도우에 OpenVPN 설치 - 서버 측 구성
; https://www.sysnet.pe.kr/2/0/12224

개발 환경 구성: 492. 윈도우에 OpenVPN 설치 - 클라이언트 측 구성
; https://www.sysnet.pe.kr/2/0/12225

개발 환경 구성: 493. OpenVPN의 네트워크 구성
; https://www.sysnet.pe.kr/2/0/12226

개발 환경 구성: 515. OpenVPN - 재부팅 후 ICS(Internet Connection Sharing) 기능이 동작 안하는 문제
; https://www.sysnet.pe.kr/2/0/12325




윈도우에 OpenVPN 설치 - 클라이언트 측 구성

OpenVPN 서버를 구성했으니,

윈도우에 OpenVPN 설치 - 서버 측 구성
; https://www.sysnet.pe.kr/2/0/12224

이제 해당 네트워크에 참여할 클라이언트 측 구성을 할 차례입니다. OpenVPN의 경우 이 과정도 서버와 동일한 설치 파일을 사용하는데,

OpenVPN - Windows 10/Server 2016/Server 2019 installer (NSIS) GnuPG Signature openvpn-install-2.4.9-I601-Win10.exe 
; https://openvpn.net/community-downloads/

단지 이번에는 설치 과정에 나오는 질문들은 모두 그냥 기본값으로 두고 설치를 진행해도 됩니다. (즉, "EasyRSA2 Certificate Management Scripts" 구성 요소를 설치할 필요는 없습니다.)

설치가 완료되면, 이번에도 마찬가지로 "C:\Program Files\OpenVPN"에 파일이 위치합니다.




바이너리는 클라이언트에 설치했지만, 이제 다시 서버 쪽 환경으로 넘어가서 ca 인증 기관으로부터 클라이언트를 위한 인증서를 하나 발급받아야 합니다.

// 서버 측에서 클라이언트를 위한 인증서 생성 (Common Name은 임의의 값 사용)

C:\Users\clntusr> cd "C:\Program Files\OpenVPN\easy-rsa"

C:\Program Files\OpenVPN\easy-rsa> vars

C:\Program Files\OpenVPN\easy-rsa> build-key client1
Ignoring -days; not generating a certificate
Generating a RSA private key
..........................................................................++++
.....................................................................................................................................................................................................++++
writing new private key to 'keys\client1.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) [US]:
State or Province Name (full name) [CA]:
Locality Name (eg, city) [SanFrancisco]:
Organization Name (eg, company) [OpenVPN]:
Organizational Unit Name (eg, section) [changeme]:
Common Name (eg, your name or your server's hostname) [changeme]:myvpnclient1
Name [changeme]:
Email Address [mail@host.domain]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName           :PRINTABLE:'US'
stateOrProvinceName   :PRINTABLE:'CA'
localityName          :PRINTABLE:'SanFrancisco'
organizationName      :PRINTABLE:'OpenVPN'
organizationalUnitName:PRINTABLE:'changeme'
commonName            :PRINTABLE:'myvpnclient1'
name                  :PRINTABLE:'changeme'
emailAddress          :IA5STRING:'mail@host.domain'
Certificate is to be certified until Jun  9 00:33:57 2030 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

C:\Program Files\OpenVPN\easy-rsa>

명령이 완료되었으면 "C:\Program Files\OpenVPN\easy-rsa\keys" 폴더에 client1.crt, client1.csr, client1.key 파일이 생성됩니다. 그럼, 이전에 생성해 두었던 ca.crt, ta.key 파일을 포함한 다음의 파일들을,

  • ca.crt
  • client1.crt
  • client1.key
  • ta.key

클라이언트 측의 "C:\Program Files\OpenVPN\config" 폴더에 복사합니다. 또한 서버 때와 마찬가지로 OpenVPN의 동작 환경을 미리 정의한 템플릿 파일인 "C:\Program Files\OpenVPN\sample-config\client.ovpn"을 "C:\Program Files\OpenVPN\config" 폴더에 복사한 후, 다음의 설정들을 변경해 줍니다.

// 만약 OpenVPN 서버의 주소가 my.test.com이라면,

remote my.test.com 1194
cert client1.crt
key client1.key

(그 외 값들도 원한다면 자신의 환경에 따라 적절하게 변경한 후), 마지막으로 관리자 권한의 cmd.exe 명령행에서 다음의 명령어로 VPN 연결을 할 수 있습니다.

C:\Program Files\OpenVPN\config> ..\bin\openvpn client.ovpn
Thu Jun 11 09:42:17 2020 OpenVPN 2.4.9 x86_64-w64-mingw32 [SSL (OpenSSL)] [LZO] [LZ4] [PKCS11] [AEAD] built on Apr 16 2020
Thu Jun 11 09:42:17 2020 Windows version 6.2 (Windows 8 or greater) 64bit
Thu Jun 11 09:42:17 2020 library versions: OpenSSL 1.1.1f  31 Mar 2020, LZO 2.10
Thu Jun 11 09:42:17 2020 Outgoing Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
Thu Jun 11 09:42:17 2020 Incoming Control Channel Authentication: Using 160 bit message hash 'SHA1' for HMAC authentication
Thu Jun 11 09:42:17 2020 TCP/UDP: Preserving recently used remote address: [AF_INET]64.102.56.78:1194
Thu Jun 11 09:42:17 2020 Socket Buffers: R=[65536->65536] S=[65536->65536]
Thu Jun 11 09:42:17 2020 UDP link local: (not bound)
Thu Jun 11 09:42:17 2020 UDP link remote: [AF_INET]64.102.56.78:1194
Thu Jun 11 09:42:17 2020 TLS: Initial packet from [AF_INET]64.102.56.78:1194, sid=35cbd3b6 a489989e
Thu Jun 11 09:42:17 2020 VERIFY OK: depth=1, C=US, ST=CA, L=SanFrancisco, O=OpenVPN, OU=changeme, CN=myca, name=changeme, emailAddress=mail@host.domain
Thu Jun 11 09:42:17 2020 VERIFY KU OK
Thu Jun 11 09:42:17 2020 Validating certificate extended key usage
Thu Jun 11 09:42:17 2020 ++ Certificate has EKU (str) TLS Web Server Authentication, expects TLS Web Server Authentication
Thu Jun 11 09:42:17 2020 VERIFY EKU OK
Thu Jun 11 09:42:17 2020 VERIFY OK: depth=0, C=US, ST=CA, L=SanFrancisco, O=OpenVPN, OU=changeme, CN=myvpn, name=changeme, emailAddress=mail@host.domain
Thu Jun 11 09:42:17 2020 Control Channel: TLSv1.3, cipher TLSv1.3 TLS_AES_256_GCM_SHA384, 4096 bit RSA
Thu Jun 11 09:42:17 2020 [myvpn] Peer Connection Initiated with [AF_INET]64.102.56.78:1194
Thu Jun 11 09:42:18 2020 SENT CONTROL [myvpn]: 'PUSH_REQUEST' (status=1)
Thu Jun 11 09:42:18 2020 PUSH: Received control message: 'PUSH_REPLY,dhcp-option DNS 8.8.8.8,dhcp-option DNS 168.126.63.1,route 10.8.0.0 255.255.255.0,topology net30,ping 10,ping-restart 120,ifconfig 10.8.0.6 10.8.0.5,peer-id 0,cipher AES-256-GCM'
Thu Jun 11 09:42:18 2020 OPTIONS IMPORT: timers and/or timeouts modified
Thu Jun 11 09:42:18 2020 OPTIONS IMPORT: --ifconfig/up options modified
Thu Jun 11 09:42:18 2020 OPTIONS IMPORT: route options modified
Thu Jun 11 09:42:18 2020 OPTIONS IMPORT: --ip-win32 and/or --dhcp-option options modified
Thu Jun 11 09:42:18 2020 OPTIONS IMPORT: peer-id set
Thu Jun 11 09:42:18 2020 OPTIONS IMPORT: adjusting link_mtu to 1624
Thu Jun 11 09:42:18 2020 OPTIONS IMPORT: data channel crypto options modified
Thu Jun 11 09:42:18 2020 Data Channel: using negotiated cipher 'AES-256-GCM'
Thu Jun 11 09:42:18 2020 Outgoing Data Channel: Cipher 'AES-256-GCM' initialized with 256 bit key
Thu Jun 11 09:42:18 2020 Incoming Data Channel: Cipher 'AES-256-GCM' initialized with 256 bit key
Thu Jun 11 09:42:18 2020 interactive service msg_channel=0
Thu Jun 11 09:42:18 2020 ROUTE_GATEWAY 192.168.0.1/255.255.255.0 I=23 HWADDR=1c:23:dc:45:8d:d7
Thu Jun 11 09:42:18 2020 open_tun
Thu Jun 11 09:42:18 2020 TAP-WIN32 device [Local Area Connection] opened: \\.\Global\{ADBBCAAE-B7AA-4553-89CD-97141B40AA6F}.tap
Thu Jun 11 09:42:18 2020 TAP-Windows Driver Version 9.24
Thu Jun 11 09:42:19 2020 Notified TAP-Windows driver to set a DHCP IP/netmask of 10.8.0.6/255.255.255.252 on interface {ADBBCAAE-B7AA-4553-89CD-97141B40AA6F} [DHCP-serv: 10.8.0.5, lease-time: 31536000]
Thu Jun 11 09:42:19 2020 Successful ARP Flush on interface [89] {ADBBCAAE-B7AA-4553-89CD-97141B40AA6F}
Thu Jun 11 09:42:24 2020 TEST ROUTES: 1/1 succeeded len=1 ret=1 a=0 u/d=up
Thu Jun 11 09:42:24 2020 C:\WINDOWS\system32\route.exe ADD 10.8.0.0 MASK 255.255.255.0 10.8.0.5
Thu Jun 11 09:42:24 2020 ROUTE: CreateIpForwardEntry succeeded with dwForwardMetric1=25 and dwForwardType=4
Thu Jun 11 09:42:24 2020 Route addition via IPAPI succeeded [adaptive]
Thu Jun 11 09:42:24 2020 WARNING: this configuration may cache passwords in memory -- use the auth-nocache option to prevent this
Thu Jun 11 09:42:24 2020 Initialization Sequence Completed

정상적으로 연결되었다면 서버 측 콘솔에는 다음과 같은 식의 내용들이 출력됩니다.

Thu Jun 11 09:42:16 2020 165.24.56.23:59374 TLS: Initial packet from [AF_INET6]::ffff:165.24.56.23:59374, sid=c8110058 5fa1884e
Thu Jun 11 09:42:16 2020 165.24.56.23:59374 VERIFY OK: depth=1, C=US, ST=CA, L=SanFrancisco, O=OpenVPN, OU=changeme, CN=myca, name=changeme, emailAddress=mail@host.domain
Thu Jun 11 09:42:16 2020 165.24.56.23:59374 VERIFY OK: depth=0, C=US, ST=CA, L=SanFrancisco, O=OpenVPN, OU=changeme, CN=myvpnclient1, name=changeme, emailAddress=mail@host.domain
Thu Jun 11 09:42:16 2020 165.24.56.23:59374 peer info: IV_VER=2.4.9
Thu Jun 11 09:42:16 2020 165.24.56.23:59374 peer info: IV_PLAT=win
Thu Jun 11 09:42:16 2020 165.24.56.23:59374 peer info: IV_PROTO=2
Thu Jun 11 09:42:16 2020 165.24.56.23:59374 peer info: IV_NCP=2
Thu Jun 11 09:42:16 2020 165.24.56.23:59374 peer info: IV_LZ4=1
Thu Jun 11 09:42:16 2020 165.24.56.23:59374 peer info: IV_LZ4v2=1
Thu Jun 11 09:42:16 2020 165.24.56.23:59374 peer info: IV_LZO=1
Thu Jun 11 09:42:16 2020 165.24.56.23:59374 peer info: IV_COMP_STUB=1
Thu Jun 11 09:42:16 2020 165.24.56.23:59374 peer info: IV_COMP_STUBv2=1
Thu Jun 11 09:42:16 2020 165.24.56.23:59374 peer info: IV_TCPNL=1
Thu Jun 11 09:42:16 2020 165.24.56.23:59374 Control Channel: TLSv1.3, cipher TLSv1.3 TLS_AES_256_GCM_SHA384, 4096 bit RSA
Thu Jun 11 09:42:16 2020 165.24.56.23:59374 [myvpnclient1] Peer Connection Initiated with [AF_INET6]::ffff:165.24.56.23:59374
Thu Jun 11 09:42:16 2020 myvpnclient1/165.24.56.23:59374 MULTI_sva: pool returned IPv4=10.8.0.6, IPv6=(Not enabled)
Thu Jun 11 09:42:16 2020 myvpnclient1/165.24.56.23:59374 MULTI: Learn: 10.8.0.6 -> myvpnclient1/165.24.56.23:59374
Thu Jun 11 09:42:16 2020 myvpnclient1/165.24.56.23:59374 MULTI: primary virtual IP for myvpnclient1/165.24.56.23:59374: 10.8.0.6
Thu Jun 11 09:42:17 2020 myvpnclient1/165.24.56.23:59374 PUSH: Received control message: 'PUSH_REQUEST'
Thu Jun 11 09:42:17 2020 myvpnclient1/165.24.56.23:59374 SENT CONTROL [myvpnclient1]: 'PUSH_REPLY,dhcp-option DNS 8.8.8.8,dhcp-option DNS 168.126.63.1,route 10.8.0.0 255.255.255.0,topology net30,ping 10,ping-restart 120,ifconfig 10.8.0.6 10.8.0.5,peer-id 0,cipher AES-256-GCM' (status=1)
Thu Jun 11 09:42:17 2020 myvpnclient1/165.24.56.23:59374 Data Channel: using negotiated cipher 'AES-256-GCM'
Thu Jun 11 09:42:17 2020 myvpnclient1/165.24.56.23:59374 Outgoing Data Channel: Cipher 'AES-256-GCM' initialized with 256 bit key
Thu Jun 11 09:42:17 2020 myvpnclient1/165.24.56.23:59374 Incoming Data Channel: Cipher 'AES-256-GCM' initialized with 256 bit key

일단, 이렇게 잘 동작하는 것을 확인했으면 이후로는 "OpenVPN GUI" 프로그램을 이용해 트레이 아이콘의 "Connect" 메뉴로 VPN 접속을 편리하게 수행할 수 있습니다.




[이 글에 대해서 여러분들과 의견을 공유하고 싶습니다. 틀리거나 미흡한 부분 또는 의문 사항이 있으시면 언제든 댓글 남겨주십시오.]







[최초 등록일: ]
[최종 수정일: 6/11/2020]

Creative Commons License
이 저작물은 크리에이티브 커먼즈 코리아 저작자표시-비영리-변경금지 2.0 대한민국 라이센스에 따라 이용하실 수 있습니다.
by SeongTae Jeong, mailto:techsharer at outlook.com

비밀번호

댓글 작성자
 




... 136  137  138  139  140  141  142  143  144  145  146  147  148  149  [150]  ...
NoWriterDateCnt.TitleFile(s)
1303정성태6/26/201227410개발 환경 구성: 152. sysnet DB를 SQL Azure 데이터베이스로 마이그레이션
1302정성태6/25/201229483개발 환경 구성: 151. Azure 웹 사이트에 사용자 도메인 네임 연결하는 방법
1301정성태6/20/201225770오류 유형: 156. KB2667402 윈도우 업데이트 실패 및 마이크로소프트 Answers 웹 사이트 대응
1300정성태6/20/201231803.NET Framework: 329. C# - Rabin-Miller 소수 생성방법을 이용하여 RSACryptoServiceProvider의 개인키를 직접 채워보자 [1]파일 다운로드2
1299정성태6/18/201232905제니퍼 .NET: 21. 제니퍼 닷넷 - Ninject DI 프레임워크의 성능 분석 [2]파일 다운로드2
1298정성태6/14/201234422VS.NET IDE: 72. Visual Studio에서 pfx 파일로 서명한 경우, 암호는 어디에 저장될까? [2]
1297정성태6/12/201231061VC++: 63. 다른 프로세스에 환경 변수 설정하는 방법파일 다운로드1
1296정성태6/5/201227710.NET Framework: 328. 해당 DLL이 Managed인지 / Unmanaged인지 확인하는 방법 - 두 번째 이야기 [4]파일 다운로드1
1295정성태6/5/201225094.NET Framework: 327. RSAParameters와 System.Numerics.BigInteger 이야기파일 다운로드1
1294정성태5/27/201248555.NET Framework: 326. 유니코드와 한글 - 유니코드와 닷넷을 이용한 한글 처리 [7]파일 다운로드2
1293정성태5/24/201229783.NET Framework: 325. System.Drawing.Bitmap 데이터를 Parallel.For로 처리하는 방법 [2]파일 다운로드1
1292정성태5/24/201223765.NET Framework: 324. First-chance exception에 대해 조건에 따라 디버거가 멈추게 할 수는 없을까? [1]파일 다운로드1
1291정성태5/23/201230297VC++: 62. 배열 초기화를 위한 기계어 코드 확인 [2]
1290정성태5/18/201235087.NET Framework: 323. 관리자 권한이 필요한 작업을 COM+에 대행 [7]파일 다운로드1
1289정성태5/17/201239248.NET Framework: 322. regsvcs.exe로 어셈블리 등록 시 시스템 변경 사항 [5]파일 다운로드2
1288정성태5/17/201226470.NET Framework: 321. regasm.exe로 어셈블리 등록 시 시스템 변경 사항 (3) - Type Library파일 다운로드1
1287정성태5/17/201229307.NET Framework: 320. regasm.exe로 어셈블리 등록 시 시스템 변경 사항 (2) - .NET 4.0 + .NET 2.0 [2]
1286정성태5/17/201238248.NET Framework: 319. regasm.exe로 어셈블리 등록 시 시스템 변경 사항 (1) - .NET 2.0 + x86/x64/AnyCPU [5]
1285정성태5/16/201233279.NET Framework: 318. gacutil.exe로 어셈블리 등록 시 시스템 변경 사항파일 다운로드1
1284정성태5/15/201225711오류 유형: 155. Windows Phone 연결 상태에서 DRIVER POWER STATE FAILURE 블루 스크린 뜨는 현상
1283정성태5/12/201233326.NET Framework: 317. C# 관점에서의 Observer 패턴 구현 [1]파일 다운로드1
1282정성태5/12/201226116Phone: 6. Windows Phone 7 Silverlight에서 Google Map 사용하는 방법 [3]파일 다운로드1
1281정성태5/9/201233204.NET Framework: 316. WPF/Silverlight의 그래픽 단위와 Anti-aliasing 처리를 이해하자 [1]파일 다운로드1
1280정성태5/9/201226165오류 유형: 154. Could not load type 'System.ServiceModel.Activation.HttpModule' from assembly 'System.ServiceModel, ...'.
1279정성태5/9/201224926.NET Framework: 315. 해당 DLL이 Managed인지 / Unmanaged인지 확인하는 방법 [1]파일 다운로드1
1278정성태5/8/201226151오류 유형: 153. Visual Studio 디버깅 - Unable to break execution. This process is not currently executing the type of code that you selected to debug.
... 136  137  138  139  140  141  142  143  144  145  146  147  148  149  [150]  ...