-
[OpenVPN] Ubuntu 18.04 에 OpenVPN server 구축하기Robot, Autonomous Vehicle 2021. 2. 9. 00:04
이모티콘 처리 업데이투
참고하였슴니다
OpenVPN Server 구축
openvpn 및 openssh 설치
sudo apt-get update sudo apt-get install openvpn sudo apt-get install openssh-server sudo apt-get install ssh
인증서 (CA) 생성할 EasyRSA 다운 및 압축 해제
참고한 선생님 버전 ( 3.0.4 ) 현재 최신 버전 ( 3.0.8)
https://github.com/OpenVPN/easy-rsa/releaseswget -P ~/ https://github.com/OpenVPN/easy-rsa/releases/download/v3.0.8/EasyRSA-3.0.8.tgz tar xvf EasyRSA-3.0.8.tgz
EasyRSA의 설정정보 수정
EasyRSA-3.0.8 폴더 안 vars.exampel을 vars로 복사하여 vars에서 수정.cd ~/EasyRSA-3.0.8/ cp vars.example vars subl vars
사용자 정보 부분 수정
주석 제거하고 양식 맞게 설정.
수정후 저장.easyrsa 실행파일로 초기화 옵션 init-pki 추가하여 수정한 정보로 EasyRSA CA 서버 구축.
./easyrsa init-pki
easyrsa로 인증서 생성, 또한 OpenVPN에서 사용할 인증서와 키파일도 생성. . 이때 비번 패스 nopass 옵션 추가.
./easyrsa build-ca nopass ./easyrsa gen-req server nopass
build-ca 에서 common name 은 default Easy-RSA CA로 설정. (참조할 인증기관)
enter 치고 넘어감.gen-req 에서 인증서 사용하는 사용자 이름 default server로 설정.
enter 치고 넘어감.key파일과 certificate reqeust 파일 생성됨.
openvpn 디렉토리에 key파일 복사 ( openvpn directory : /etc/openvpn )sudo cp ~/EasyRSA-3.0.8/pki/private/server.key /etc/openvpn/
인증서 파일 만들기.
easyrsa 실행파일 옵션에 sign-req 옵션, request type은 server, key 파일 이름 server./easyrsa sign-req server server
confirm request detail 에 yes 입력하고 넘어간다
완료되면 server.crt 파일이 생성됨.생성된 server.crt 파일과 ca.crt 파일을 /etc/openvpn에 복사.
sudo cp ~/EasyRSA-3.0.8/pki/issued/server.crt /etc/openvpn/ sudo cp ~/EasyRSA-3.0.8/pki/ca.crt /etc/openvpn/
easyrsa 실행파일을 이용해 Diff-hellman key 만들어줌.
./easyrsa gen-dh
dh.pem 파일이 생성됨.
openvpn 이용하여 ta.key 파일 생성
openvpn --genkey --secret ta.key
생성한 ta.key와 dh.pem 파일을 openvpn에 복사.
sudo cp ~/EasyRSA-3.0.8/ta.key /etc/openvpn/ sudo cp ~/EasyRSA-3.0.8/pki/dh.pem /etc/openvpn/
서버에 대한 인증서 준비 끝
클라이언트가 사용할 인증서 준비
client 인증서는 vpn유저 1명당 발급. 따라서 vpn 계정이 여러개 이면 아래 동작 반복해야함.
client 인증 서 모아둘 폴더 생성mkdir -p ~/client-configs/keys chmod -R 700 ~/client-configs
easyrsa 실행파일 사용하여 vpn계정에 대한 인증서 만들기.
easyrsa gen-req옵션에 vpn 계정이름 'kana' 넣고, 비번 입력 패스 옵션 추가.cd ~/EasyRSA-3.0.8/ ./easyrsa gen-req kana nopass //'kana' == common name
사용자 이름 확인하고 enter 치고 진행.
key pair와 certificate request 파일이 생성됨.생성된 key 파일을 client-configs key 폴더에 복사함.
kana.key 파일로 인증서 만들기, request type은 client.cp pki/private/kana.key ~/client-configs/keys ./easyrsa sign-req client kana
confirm request detail 에 yes 치고 진행
인증서파일 kana.crt가 생성됨.만들어진 인증서 kana.crt, tar.key, ca.crt 파일 모두 client keys 폴더에 복사한다.
sudo cp pki/issued/kana.crt ~/client-configs/keys/ sudo cp ~/EasyRSA-3.0.8/ta.key ~/client-configs/keys/ sudo cp /etc/openvpn/ca.crt ~/client-configs/keys/
OpenVPN 계정으로 사용할 kana 게정의 인증서가 준비됨.
OpenVPN 설정
openvpn이 제공한 sample config 파일 복사하고 압축해제
sudo cp /usr/share/doc/openvpn/examples/sample-config-files/server.conf.gz /etc/openvpn/ sudo gzip -d /etc/openvpn/server.conf.gz
압축 푼 server.conf 파일 열어서 다음 내용들 전부 수정.
sudo subl /etc/openvpn/server.conf
key-direction 0 추가
auth SHA256 추가
dh2048.pem 주석처리
dh dh.pem 추가user, group 앞에 ; 제거
push 앞에 ; 제거
push 앞에 ; 둘다 제거
사용중인 인터넷 회선에 대한 DNS 주소 설정 -> 현재 사용중인 인터넷은 KT
통신사별 DNS 서버 IP 주소
SKT
기본 DNS 서버 : 219.250.36.130
보조 DNS 서버 : 210.220.163.82
KT
기본 DNS 서버 : 168.126.63.1
보조 DNS 서버 : 168.126.63.2
LG
기본 DNS 서버 : 164.124.101.2
보조 DNS 서버 : 203.248.252.2
Google Public
기본 DNS 서버 : 8.8.8.8
보조 DNS 서버 : 8.8.4.4port 443으로 바꾸고, protocol은 tcp로 바꾸기 ( upd 주석 처리 )
explicit exit notify -> 0
모두 수정하였다면 server.conf 저장 후 닫기.
OpenVPN 네트워크 설정 변경
ip fowarding이 되도록 설정해야함.
/etc/sysctl.conf 에서 net.ipv4.ip_forward=1로 수정sudo subl /etc/sysctl.conf
현재 열려있는 session에서 변경사항 적용
sudo sysctl -p
방화벽 설정
VPN 서버로 들어오는 불필요한 트래픽 제거 목적
현재 네트워크 인터페이스 확인ip route | grep default
default gateway가 192.🐣.🐥.1, 인터페이스 이름은 dev 다음에 있음.
enp0s5 가 네트워크 인터페이스 네임.
지금 새롭게 구성중인 서버 인터페이스 enp4s0
ufw(방화벽) 설정을 열고 openVPN에서 사용할 rule을 추가.sudo subl /etc/ufw/before.rules
rules before 밑에 아래 내용 추가 후 저장
#
# START OPENVPN RULES
# NAT table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from OpenVPN client to enp0s5
-A POSTROUTING -s 10.8.0.0/8 -o enp0s5 -j MASQUERADE
COMMIT
# END OPENVPN RULES
#UFW에 policy 변경.
sudo subl /etc/default/ufw
DEFAULT_FORWARD_POLICY 부분 ACCEPT로 변경
openVPN의 port와 프로토콜을 변경했기 때문에 방화벽(ufw)에도 적용.
openSSH도 추가.
방화벽 설정이 다 되었다면 ufw disable enable을 실행해 재시작.sudo ufw allow 443/tcp sudo ufw allow OpenSSH sudo ufw disable sudo ufw enable
ufw enable시 proceed? 물어보면 y입력후 넘어간다.
OpenVPN 시작
systemctl start로 openvpn 시작,
status 로 상태확인,
stop 으로 종료.sudo systemctl start openvpn@server sudo systemctl status openvpn@server
OpenVPN의 tun0 인터페이스도 확인.ip addr show tun0
서버가 reboot되어도 자동으로 시작되게끔 설정sudo systemctl enable openvpn@server
여기까지 OpenVPN 설정완료, 실행 완료.
Client 추가 설정 구성 잡기.
사용자 추가할 때마다 인증서 만들어야하기 때문에, client 추가 설정 구성.
만들었던 client-config 에 하위폴더 files 하위폴더 만들기.
Windows 제외한 OS에서 VPN 연결을 하려면 ta.key 파일도 필요함.
ta.key 파일도 client-configs/files/ 로 복사하고 권한을 변경.
client configuration 샘플파일을 client-configs 폴더에 복사.mkdir -p ~/client-configs/files sudo cp ~/client-configs/keys/ta.key ~/client-configs/files/ sudo chmod 644 ~/client-configs/files/ta.key cp /usr/share/doc/openvpn/examples/sample-config-files/client.conf ~/client-configs/base.conf
그 후 복사한 base.conf 파일내용 아래 내용대로 전부 수정sudo subl ~/client-configs/base.conf
penVPN 서버의 ip와 port를 추가. (ip는 public ip -> 네이버에 내 IP라고 검색해서 나오는 공용 IP)
port도 기본 포트가 아닌 443으로 변경했으니 443으로 변경.
[ text로 대체 ]
39 # The hostname/IP and port of the server.
40 # You can have multiple remote entries
41 # to load balance brtween the servers.
42 remote 175.😖.😖.🤔 443
43 ;remote my-server-2 1194
proto를 찾고 tcp로 변경.
주석을 변경.user,group 앞 주석 ( ; ) 제거
ca, cert, key 앞 주석 모두 제거
auth SHA256 추가, key-direction 1 추가
제일 마지막 줄에 아래 내용 주석 처리 된 채로 추가
# script-security 2
# up /etc/openvpn/update-resolv-conf
# down /etc/openvpn/update-resolv-conf
Simple Script 만들기
인증서와 key 파일들을 구성하고 ~/client-configs/files 경로에 생성하게 해줌.
~/client-configs 폴더 안애 make_config.sh 파일 생성sudo subl ~/client-configs/make_config.sh
파일 안에 아래 내용 추가
#!/bin/bash # First argument: Client identifier KEY_DIR=~/client-configs/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
저장 후 권한 추가
sudo chmod 700 ~/client-configs/make_config.sh
사용자 구성 설정 완료
사용자 계정을 openvpn 계정으로 만들기.
client-config 파일로 이용해 계정 만들기
make_config.sh <인증서를 만든 계정>을 실행하면 ~/client-configs/files 안에 계정 이름으로된 .ovpn 파일이 생성됨.
cd ~/client-configs sudo ./make_config.sh kana
kana.ovpn 파일 생성됨.
.ovpn 파일은 client에서 vpn 접속시 필요함.
VPN으로 접속하려는 로컬 컴퓨터나 모바일 디바이스에서 필요함.
.ovpn 파일은 암호화된 ftp(sftp)를 이용해 전달되어야 한다.
OpenVPN 서버 종료하기.
sudo systemctl stop openvpn@server
다른 머신에서 stfp 이용하여 ovpn파일과 tar.key 파일 다운로드
sftp ddong@192.168.23.19:client-configs/files/ta.key ~/Downloads/ sftp ddong@192.168.23.19:client-configs/files/kana.ovpn ~/Downloads/
라우터 port fowarding 설정.
마지막으로 외부에서 내부 openVPN server로 접속할 수 있도록 라우터의 port forwarding 설정.
내부 openVPN server IP는 192.168.😖.😖 포트는 443.
ipTIME 이라면 , 공유기 설정 모드 들어가서
NAT/라우터 관리 - 포트포워드 설정
규칙이름 : openVPN
내부 IP 주소 : 192.168.😖.😖
프로토콜 :TCP
외부포트 : 443, 내부포트 : 443'Robot, Autonomous Vehicle' 카테고리의 다른 글
[bash file] 이것저것 (0) 2021.02.13 [Jeton Nano] 환경 설정 (0) 2021.02.11 [ROS] Ubuntu 18.04 에 ROS melodic 환경 설정 및 작업 환경 설정 (0) 2021.02.10 [OpenVPN & ROS] OpenVPN 이용한 가상 네트워크환경에서의 ROS구동 (구현중) (0) 2021.02.09 [OpenVPN] Ubuntu 18.04 에서 OpenVPN 에 Client 계정 추가 & 실행하기 (0) 2021.02.09