사용자 도구

사이트 도구


ubuntu에_openvpn_설치

Ubuntu 에 OpenVPN 설치하기


우분투 16.04 LTS 버전을 기준으로, OpenVPN 설치하는 방법을 정리해본다.

필요한 패키지 설치

  • sudo apt-get update && sudo apt-get upgrade
  • sudo apt-get install openvpn easy-rsa
  • CA (Certificate Authority) 빌드
mkdir openvpn-ca
cd openvpn-ca
  • 변수 수정하기, 아래에 있는 것이 vars 파일에 들어 있는데, 적당히 바꾸면 된다. (안 바꿔도 별일은 없지만 ..)
    • vi vars
export KEY_COUNTRY="US"
export KEY_PROVINCE="CA"
export KEY_CITY="SanFrancisco"
export KEY_ORG="Fort-Funston"
export KEY_EMAIL="me@myhost.mydomain"
export KEY_OU="MyOrganizationalUnit"
export KEY_NAME="server"
  • ln -s openssl-1.0.0.cnf openssl.cnf
  • source vars (또는 source ./vars)
    • NOTE: If you run ./clean-all, I will be doing a rm -rf on /home/…/openvpn-ca/keys 이라고 나오면 정상적이다.
./clean-all
  • ./build-ca 를 실행하면 몇가지 물어보는데, 그냥 엔터키만 눌러서 쭉 넘어가고 버전에 따라 다른데, 끝에 가서 진짜로 할 거냐 (y/n)를 물어보는데, y 를 누르면 계산을 하면서 CA 파일을 만든다. 아참, challenge password 라는 게 보이면 비밀번호를 굳이 입력하지 않고 엔터 치면 된다.
  • DH (Diffie-Hellman) 키를 생성하자. 이건 좀 오래 걸린다.
./build-dh
  • HMAC(Hash-based Message Authentication Code) 키를 만들자.
openvpn --genkey --secret keys/ta.key
  • 서버 설정
cd ~/openvpn-ca/keys
sudo cp ca.crt server.crt server.key ta.key dh2048.pem /etc/openvpn
gunzip -c /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz | sudo tee /etc/openvpn/server.conf
  * server.conf 파일을 변경하자. 마지막 두줄은 추가해야 한다.
    * sudo vi /etc/openvpn/server.conf
<code>
proto tcp # udp 는 주석 처리
push "redirect-gateway def1 bypass-dhcp"
push "dhcp-option DNS 168.126.63.2"
push "dhcp-option DNS 8.8.8.8"
tls-auth ta.key 0
cipher AES-128-CBC
user nobody
group nogroup
key-direction 0
auth SHA256
  • 서버 네트워크 설정
sudo vi /etc/sysctl.conf

net.ipv4.ip_forward=1 앞에 #이 붙어 있을텐데, #을 지우자. 저장하고 나와서 ..

sudo sysctl -p 

sudo iptables --table nat --append POSTROUTING --out-interface eth0 -j MASQUERADE
  • iptables 설정을 부팅때마다 실행시키기 위해서는 몇가지 방법이 있는데, /etc/rc.local 파일 정도에 윗줄의 명령에서 sudo 를 빼고 입력하거나 sudo apt-get install iptables-persistent 를 실행하여 현재의 iptables 규칙을 저장하느냐의 방법이 있는데, 내 경우는 /etc/rc.local 파일에 적는 것을 추천한다.
  • 혹시라도 서버 앞단에 있는 방화벽이나 공유기 등에서 1194 포트가 막혀 있는지 확인해보고, 막혀 있다면 포트포워딩이나 열어야 하며, 그게 불가능하다면 다른 열려 있는 포트로 바꾸자. 바꾸려면 위에서 설명한 server.conf 파일과 아래에 설명할 클라이언트에서 포트를 바꿔서 적어주어야 한다.
  • 서버 실행
sudo systemctl start openvpn@server
sudo systemctl status openvpn@server
ip addr show tun0
  • tun0 가 뜨는지를 보자. 이게 안 뜬다면 설정이 제대로 안된 거다.
  • 클라이언트 키 생성
cd openvpn-ca
source vars (또는 source ./vars)
./build-key akpil akpil 대신 다른 이름을 써도 된다.
mkkdir -p client-configs/files
cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
vi ~/client-configs/base.conf 아래 세줄은 추가하여야 한다.

remote 서버 ip 주소 또는 도메인 이름 1194
proto tcp # udp 는 주석 처리
user nobody # 주석 해제
group nogroup # 주석 해제
#ca ca.crt # 붙여서 주석처리
#cert client.crt # 붙여서 주석처리
#key client.key # 붙여서 주석처리
key-direction 1
cipher AES-128-CBC
auth SHA256
  • 클라이언트 인증서를 만들기 위한 스크립트 파일을 하나 만들자.
vi ~/client-configs/make_config.sh
 
#!/bin/bash
# First argument: Client identifier
KEY_DIR=~/openvpn-ca/keys
OUTPUT_DIR=~/client-configs/files
BASE_CONFIG=~/client-configs/base.conf
cat ${BASE_CONFIG} \
     <(echo -e '<ca>') \
     ${KEY_DIR}/ca.crt \
     <(echo -e '</ca>\n<cert>') \
     ${KEY_DIR}/${1}.crt \
     <(echo -e '</cert>\n<key>') \
     ${KEY_DIR}/${1}.key \
     <(echo -e '</key>\n<tls-auth>') \
     ${KEY_DIR}/ta.key \
     <(echo -e '</tls-auth>') \
     > ${OUTPUT_DIR}/${1}.ovpn
chmod 700 ~/client-configs/make_config.sh
~/client-configs/make_config.sh akpil

이렇게 하면 akpil.ovpn 파일이 생성된다. 이 파일을 클라이언트 디바이스에 전송하여 적용시키면 된다.


2018/03/14 akpil

ubuntu에_openvpn_설치.txt · 마지막으로 수정됨: 2018/03/14 10:25 저자 akpil

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki