로그인
Sign in
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
?

단축키

Prev이전 문서

Next다음 문서

크게 작게 위로 아래로 댓글로 가기 인쇄
Extra Form

 OpenVPN 서버 구축 - 외부 네트워크에서 kdeconnect 접속을 위한 


1. 개 요

필자는 KDE 환경에서 스마트폰과 KDE 환경과 연동하여 여러가지 기능을 사용할 수 있는 kdeconnect를 즐겨 사용합니다. 카카오톡을 설치하지 않더라도 기능상의 제약이 있긴 하지만, 카카오톡 메시지를 주고 볼 수 있으며, 리눅스 데스크탑과 스마트폰끼리 서로 파일을 주고 받을 수 있기 때문에 kdeconnect를 좋아합니다.  kdeconnect에 관한 것은 이미 자세하게 강좌한 글이 있으므로 이를 참고하기 바랍니다.

동일한 네트워크상에서는 리눅스 데스크탑과 스마트폰에서 kdeconnect를 사용하는데는 문제가 없지만,  네트웍 환경이 다른 곳에서는 kdeconnect를 사용할 수 없는 문제점이 있습니다. kdeconnect는 동일한 네트워크상에 있는 KDE plasma와 스마트폰끼리만 연결되도록 되어 있습니다. 스마트폰의 kdeconnect 앱에서는 아이피나 호스트 이름으로 KDE Plasma에 접속할 수 있도록 되어 있지만, 외부 네트워크 즉 인터넷상에서는 되질 않습니다.


Linux Desktop   

<--------->

상호연결

Smart Phone S9  

<--------->

연결안됨

  Linux Server 

 192.168.30.154

192.168.30.155

  172.30.1.35  

 

 


 OpenVPN Tunnel

10.8.0.6

<--연결-->

10.8.0.1


그러나 네트웍이 달라도 동일한 사설 네트워크대로 묶어 주는 VPN(Virtual Private Network)를 사용하면 이 문제를 쉽게 극복할 수 있습니다. 상기 도표에서 보는 바와 같이 스마트폰과 리눅스 서버는 같은 공간에 있을지라도 다른 네트워크의 아이피를 사용하고 있어서 kdeconnect를 연결할 수가 없습니다. 하지만 인터넷상에 또다른 사설망을 구축하여 서로 같은 네트워크상에 있게 해 주면 원래는 서로 다른 네트워크일지라도 동일한 네트워크에 포함되기 때문에 서로 내부적으로 연결하는데 문제가 없게 됩니다. VPN이 이러한 역할을 해 주는 거죠.

따라서 네트웍이 다른 곳에서 kdeconnect로 연결하고자 한다면 VPN를 구축하면 됩니다. 이 글은 서로 다른 네트워크상에서 kdeconnect 접속을 위해 동일한 사설 네트워크로 만들어 주는 VPN를 만드는 과정에 대해서 설명합니다.

VPN에 대해서 정확히 이해되지 않는 상태에서 또한 서버를 구축해 본 경험이 없는 여러분들에게는 VPN 서버 구축하는 과정이 쉽지 않을 것입니다. 그렇지만 이 강좌에서 설명하고 있는 그대로 따라 한다면 비록 어렵겠지만, 쉽게 VPN 서버를 구축하여 클라이언트 환경에서 접속할 수 있습니다. 이 강좌에서 설명하고 있는 따라하기식의 강좌 자체도 어렵다고 한다면 넘버원 리눅스 RPM 리포지토리 서버에서 제공하고 있는 패키지로 설치하면 노고가 덜해 질 것입니다. 이 부분에 대해서는 따로 설명하겠고, 지금부터 설명하는 것은 PCLinuxOS 리포지토리 서버에서 지원하는 OpenVPN RPM 패키지로 설치하여 사용하는 과정입니다. 리눅스에서 VPN 설치는 오픈소스인 OpenVPN를 이용하면 됩니다. 그러면 넘버원 리눅스 2018 SE UP3 버전 기준으로 OpenVPN를 가지고 VPN를 구축하는 방법을 설명합니다. 


2. OpenVPN 서버 구축 과정(간략)

- OpenVPN 패키지 설치

- vars 파일 수정

- build-ca 실행

- build-key-server server 실행

- build-key 실행

- build-dh 실행

- server.conf 수정및 openvpn 데몬 실행

STEP1. RPM 저장소로부터 시냅틱에서 openvpn 패키지를 설치합니다. 만일 콘솔에서 설치하려면 다음과 같이 명령을 실행합니다.

  [root@localhost ~]# apt-get install openvpn

STEP2. /usr/share/openvpn/easy-rsa 경로로 이동합니다.(지금부터 모든 작업은 콘솔창을 열어서 진행합니다)

  [root@localhost ~]# cd /usr/share/openvpn/easy-rsa

STEP3. vars 파일을 편집기로 열어서 다음 설정들을 수정합니다.

 export KEY_SIZE=2048                                        # 1024값을 2048로 수정

 export KEY_COUNTRY="KR"                               # 국가 입력
 export KEY_PROVINCE="GG"                              # 지방 입력
 export KEY_CITY="GIMPO"                                 # 도시 입력
 export KEY_ORG="No1.Linux"                             # 회사명 또는 기관명 입력
 export KEY_EMAIL="no1linux@no1linux"            # 이메일 주소
 export KEY_CN=no1linux                                    # key 이름으로 서버용은 server, 클라이언트는 client
 export KEY_NAME=no1linux                               # 원하는 이름으로 입력.
 export KEY_OU=No1.Linux                                  # 원하는 이름으로 입력

이 파일을 수정한 다음에 source 명령으로 이 파일 내용을 불러올 수 있도록 합니다.

  [root@localhost easy-rsa] source ./vars

  NOTE: If you run ./clean-all, I will be doing a rm -rf on /usr/share/openvpn/easy-rsa/keys

  [root@localhost easy-rsa]#


source 명령을 실행한 후에 ./clean-all 명령을 실행하여 /usr/share/openvpn/easy-rsa/keys 경로에 있는 인증서 파일들을 모두 제거합니다.

  [root@localhost easy-rsa]# ./clean-all

STEP4.  build-ca 명령으로 Root CA 루트 인증서를 생성합니다.

[root@localhost easy-rsa]# ./build-ca   엔터키

Generating a 1024 bit RSA private key
....................++++++
.....................................................................................................++++++
writing new private key to 'ca.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) [KR]:                모두 엔터키를 칩니다. 앞서 vars에서 정의했기 때문에 입력하지
State or Province Name (full name) [GG]:    않아도 됩니다.
Locality Name (eg, city) [GIMPO]:
Organization Name (eg, company) [No1.Linux]:
Organizational Unit Name (eg, section) [No1.Linux]:
Common Name (eg, your name or your server's hostname) [no1linux]:
Name [no1linux]:
Email Address[no1linux@no1linux]:


STEP5. build-key-server server 명령을 실행하여 server.key를 생성합니다.

[root@localhost easy-rsa]# ./build-key-server server    엔터키
Generating a 1024 bit RSA private key
............................++++++
..++++++
writing new private key to 'server.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) [KR]:                                  모두 엔터키를 치면 됩니다.
State or Province Name (full name) [GG]:
Locality Name (eg, city) [GIMPO]:
Organization Name (eg, company) [No1.Linux]:
Organizational Unit Name (eg, section) [No1.Linux]:
Common Name (eg, your name or your server's hostname) [server]:
Name [no1linux]:
Email Address [no1linux@no1linux]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:               보안을 유지하려면 암호를 입력합니다. 여기선 암호없이 엔터키를 칩니다.
An optional company name []:
Using configuration from /usr/share/openvpn/easy-rsa/openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName                      :PRINTABLE:'KR'
stateOrProvinceName      :PRINTABLE:'GG'
localityName                       :PRINTABLE:'GIMPO'
organizationName            :PRINTABLE:'No1.Linux'
organizationalUnitName :PRINTABLE:'No1.Linux'
commonName                   :PRINTABLE:'server'
name                                     :PRINTABLE:'no1linux'
emailAddress                      :IA5STRING:'no1linux@no1linux'
Certificate is to be certified until Aug 24 08:22:19 2028 GMT (3650 days)
Sign the certificate? [y/n]:y      'y'를 입력하고 엔터키를 칩니다.


1 out of 1 certificate requests certified, commit? [y/n]y   
'y'를 입력하고 엔터키를 칩니다.
Write out database with 1 new entries
Data Base Updated
[root@localhost easy-rsa]#


STEP6. STEP5와 같은 과정으로 이번에는 build-key 명령으로 클라이언트 키를 생성해 줍니다.

 [root@localhost easy-rsa]# ./build-key client
Generating a 1024 bit RSA private key
...++++++
............++++++
writing new private key to 'client.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) [KR]:             모두 엔터키를 칩니다.

State or Province Name (full name) [GG]:
Locality Name (eg, city) [GIMPO]:
Organization Name (eg, company) [No1.Linux]:
Organizational Unit Name (eg, section) [No1.Linux]:
Common Name (eg, your name or your server's hostname) [client]:
Name [no1linux]:
Email Address [no1linux@no1linux]:

Please enter the following 'extra' attributes
to be sent with your certificate request
A challenge password []:
An optional company name []:
Using configuration from /usr/share/openvpn/easy-rsa/openssl-1.0.0.cnf
Check that the request matches the signature
Signature ok
The Subject's Distinguished Name is as follows
countryName                        :PRINTABLE:'KR'
stateOrProvinceName        :PRINTABLE:'GG'
localityName                         :PRINTABLE:'GIMPO'
organizationName              :PRINTABLE:'No1.Linux'
organizationalUnitName  :PRINTABLE:'No1.Linux'
commonName                     :PRINTABLE:'client'
name                                       :PRINTABLE:'no1linux'
emailAddress                        :IA5STRING:'no1linux@no1linux'
Certificate is to be certified until Aug 24 08:33:46 2028 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
[root@localhost easy-rsa]#


 STEP7. build-dh 명령을 실행하여 dh2048.pem 인증서를 생성합니다. 

 [root@localhost easy-rsa]# ./build-dh
Generating DH parameters, 2048 bit long safe prime, generator 2
This is going to take a long time
...........+......+.....................................................................................................+..........................

...........................................................................


STEP8. openvpn 서버 설정 파일을 /etc/openvpn 경로로 복사합니다. 

  [root@localhost easy-rsa]# cp ../sample-config-files/server.conf /etc/openvpn/


STEP9. 다음과 같이 /etc/openvpn/keys 경로를 생성하고. ta.key 키를 생성합니다.

  [root@localhost easy-rsa]# mkdir /etc/openvpn/keys

  [root@localhost easy-rsa]# openvpn --genkey --secret /etc/openvpn/keys/ta.key

STEP10.  ca.crt, server.crt, server.key, dh2048.pem 파일을 이동시킵니다.

  [root@localhost easy-rsa]#mv /usr/share/openvpn/keys/ca.crt /etc/openvpn/keys/
  [root@localhost easy-rsa]#mv /usr/share/openvpn/keys/server.crt /etc/openvpn/keys/
  [root@localhost easy-rsa]#mv /usr/share/openvpn/keys/server.key /etc/openvpn/keys/


STEP11.  /etc/openvpn/server.conf 파일 설정을 수정합니다.

  port 1194                              # 접속 포트를 확인합니다. 이는 방화벽에 있는 곳에서 허용하려면 이 포트를 풀어주어야 합니다.

  proto udp

  dev tun0                                  # VPN 인터페이스를 tun0 인터페이스로 수정합니다.

  ca /etc/openvpn/keys/ca.crt    # 인증서가 있는 위치를 지정합니다. 

  cert /etc/openvpn/keys/server.crt

  key /etc/openvpn/keys/server,key

  dh /etc/openvpn/dh2048.pem

  server 10.8.0.0 255.255.255.0    # VPN에서 사용할 아이피 주소입니다. 다른 사설 아이피로 수정해도 됩니다.

  client-to-client          # ; 주석처리를 제거합니다.


STEP12. 커널에서 IP forward 기능을 활성화하도록 다음과 같이 실행합니다.

 [root@localhost easy-rsa]#  echo 1 > /proc/sys/net/ip_forward


STEP13. 모든 설정이 완료되었으므로 다음과 같이 openvpn 데몬을 실행합니다.

 [root@localhost easy-rsa]# /etc/init.d/openvpn restart

  Shutting down openvpn:                                                                         [  OK  ]
  Starting openvpn:                                                                                       [  OK  ]

STEP14. ifconfig 명령을 실행해보면 VPN 인터페이스인 tun0 인터페이스가 존재함을 확인할 수 있습니다. 

  [root@localhost openvpn]# ifconfig
eth0      Link encap:Ethernet  HWaddr 74:27:EA:49:9E:43  
          inet addr:xxx.xxx.xxx.xxx  Bcast:xxx.xxx.xxx.255  Mask:255.255.255.0
          inet6 addr: fe80::7627:eaff:fe49:9e43/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:4089495 errors:0 dropped:5 overruns:0 frame:0
          TX packets:3480340 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:2000611413 (1.8 GiB)  TX bytes:3154370419 (2.9 GiB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:38217 errors:0 dropped:0 overruns:0 frame:0
          TX packets:38217 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:1000
          RX bytes:15984557 (15.2 MiB)  TX bytes:15984557 (15.2 MiB)

tun0      Link encap:UNSPEC  HWaddr 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00  
          inet addr:10.8.0.1  P-t-P:10.8.0.2  Mask:255.255.255.255
          inet6 addr: fe80::52b2:dfb0:68b5:a6a1/64 Scope:Link
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1500  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:100
          RX bytes:0 (0.0 b)  TX bytes:288 (288.0 b)

[root@localhost openvpn]#

넘버원 리눅스는 여러분의 지지와 후원에 의해서 운영되고 있습니다. 상기 강좌가 도움이 되었다면 강좌내에 불편을 드렸던 광고들을 클릭해 주시므로써 의사를 반영해 주실 수 있습니다.  감사합니다.




List of Articles
번호 분류 제목 글쓴이 날짜 조회 수
공지 넘버원 리눅스 팁은 FAQ 게시판으로 zharyong 2018.07.15 1866
» 인터넷 [네트워크] 외부 네트워크상에서 KDE Connect 접속을 위한 OpenVPN 서버 구축 zharyong 2018.08.27 925
211 TodayAPP [Heimdall] 리눅스에서 안드로이드 스마트폰 루팅하기 file zharyong 2018.08.16 2748
210 인터넷 [네트워크] 넘버원 리눅스에서 기가인터넷 연결하기 file zharyong 2018.07.25 1541
209 시스템 [시스템] 공인 인증서 anysign4pc 설치후 실행시 libNativeMng.so 오류 발생 zharyong 2018.07.06 1218
208 시스템 [시스템] rpm 패키지는 어떻게 푸나? How to extract RPM package directly file zharyong 2018.05.26 2003
207 인터넷 [No1.Linux 2018] 공인 인증서 적용 사이트 안내 1 zharyong 2018.05.17 854
206 인터넷 [No1.Linux 2018] 주요 은행의 인터넷 뱅킹 1 file zharyong 2018.05.17 4488
205 TodayAPP [Today'sAPP] 내 컴퓨터의 하드웨어 정보를 DB에 등록하고 열람해 보자. file zharyong 2018.05.10 458
204 시스템 [팁] xterm-256color': unknown terminal type 메시지및 MC에서 키보드 사용이 안될 때 zharyong 2018.05.04 923
203 시스템 [MC] No1.Linux 2018 SE의 mc에서 ISO 파일 내용물을 보려면 file zharyong 2018.05.03 406
202 시스템 [컴파일오류] /usr/bin/ld: cannot find -lgtk-3 zharyong 2018.05.01 9710
201 스크립트 [팁] No1.Linux 2018 SE 버전의 부팅시 하드 디스크 자동 마운트 file zharyong 2018.04.30 447
200 엑스 [한글입력기] No1.Linux 2018 SE 한글입력기 2 file zharyong 2018.04.30 3412
199 인터넷 [네트워크] 비번 없이 SSH 서버에 자동 로그인 하기 zharyong 2018.04.25 740
198 하드웨어 [하드웨어] 블루투쓰 USB 동글 동작하지 않을 경우 file zharyong 2018.04.24 3030
197 시스템 [시스템] 쉘에서 set GTK_DEBUG 관련 오류 메시지가 발생되는 경우 file zharyong 2018.04.24 473
196 [네트워크] 리얼텍 r8168 모듈로 이더넷에 장애가 있을 경우 zharyong 2018.04.19 2070
195 시스템 [시스템] DKMS(Dynamic Kernel Module Support)를 이용한 모듈 관리 zharyong 2018.04.16 6105
194 시스템 [시스템] Alternatives(Update-altenatives)로 하나의 심볼릭 링크로 여러 패키지 관리 file zharyong 2018.04.16 7261
목록
Board Pagination Prev 1 2 3 4 5 6 7 8 9 10 ... 12 Next
/ 12