OpenVPN은 라우팅 또는 브리지 구성과 원격 접근 장비에서 안전한 점-대-점 또는 사이트-대-사이트 연결을 생성하는 기술을 구현하는 가상 사설 네트워크 (VPN) 시스템입니다. 그것은 클라이언트와 서버 응용 프로그램을 모두 구현합니다.
OpenVPN은 피어에게 미리-공유된 비밀 키, 인증서 또는 사용자이름/암호를 사용하여 서로를 인증하는 것을 허용합니다. 다중클라이언트-서버 구성에서 사용될 때, 그것은 서버에게 서명과 인증 기관을 사용하여 모든 각 클라이언트에 대해 인증 증명서를 릴리스하는 것을 허용합니다.
그것은 OpenSSL 암호화 라이브러리와 마찬가지로 TLS 프로토콜을 광범위하게 사용하고, 많은 보안과 제어 기능을 포함합니다. 그것은 키 교환을 위해 SSL/TLS를 활용하는 맞춤형 보안 프로토콜을 사용합니다. 그것은 네트워크 주소 변환기 (NAT)와 방화벽을 통과할 수 있습니다.
OpenVPN은 여러 시스템에 이식 및 내장되어 왔습니다. 예를 들어, DD-WRT는 OpenVPN 서버 기능이 있습니다. SoftEther VPN, 다중-프로토콜 VPN 서버는 역시 OpenVPN 프로토콜 구현을 가집니다.
그것은 James Yonan에 의해 작성되었고 GNU General Public License 버전 2 (GPLv2)의 조건에 따라 릴리스된 자유 소프트웨어입니다. 추가적으로, 상용 라이센스가 사용될 수 있습니다.
Installaing OpenVPN server
제공되는 설치 스크립트가 있기 때문에, 그것을 사용해서 쉽게 설치할 수 있습니다:
- wget https://raw.githubusercontent.com/angristan/openvpn-install/master/openvpn-install.sh
- chmod +x openvpn-install.sh
- sudo ./openvpn-install.sh
스크립트 내부에 몇 가지 정보와 질문이 나타납니다:
- IP address: 설치하려는 시스템의 공인 IP를 출력합니다.
- Do you want to enable IPv6 support (NAT)? [y/n]: n
- What port do you want OpenVPN to listen to? 기본값(1194 포트)
- What protocol do you want OpenVPN to use? 기본값 (UDP)
- What DNS resolvers do you want to use with the VPN? 9 (Google)
- Enable compression? [y/n]: n
- Customize encryption settings? [y/n]: n
- 설치를 진행하면서 의존성 패키지 등을 설치합니다:
- Client name: testvpn
- Do you want to protect the configuration file with a password? 기본값 (passwordless)
이제 서비스를 시작하고, 클라이언트 구성을 진행하십시오:
- sudo systemctl start openvpn
- sudo systemctl enable openvpn
- sudo systemctl status openvpn
Adjust UFW
만약 서버에 ufw 방화벽이 동작 중이면, VPN 서버와 클라이언트가 데이터를 교환할 수 있도록 설정을 추가 또는 수정해야 합니다:
- sudo nano /etc/defalut/ufw
DEFAULT_FORWARD_POLICY="ACCEPT"
- sudo nano /etc/ufw/before.rules
:# NAT (Network Address Translation) table rules
*nat
:POSTROUTING ACCEPT [0:0]
# Allow traffic from clients to eth0
-A POSTROUTING -s 10.8.0.0/24 -o eth0 -p udp -j MASQUERADE
# do not delete the "COMMIT" line or the NAT table rules above will not be processed
COMMIT
여기서 server.conf에 있는 ip 주소와 네트워크 인터페이스는 자신에 맞게 수정해야 합니다. 이 내용은 filter를 하기 전에 삽입해야 하므로, 보통 제일 위에 설정해야 합니다. 위에서 프로토콜, udp로 지정된 부분은 아직 확인되지 않았습니다!!
- sudo ufw allow 1194/udp
- sudo ufw reload
마지막으로, 포워딩을 활성화해야 합니다:
- sduo sysctl -w net.ipv4.ip_forward=1
Uninstall
설치를 제거하기 위해, 같은 스크립트를 한번 더 수행합니다:
- sudo ./openvpn-install.sh
그러면, 3개의 메뉴가 출력되고, 그중에 제거 선택 사항이 있습니다.
Client configurations
OpenVPN 서버에 접근하기 위해, 클라이언트에서 프로그램을 설치하고 설정해야 합니다.
데비안/우분투-계열 컴퓨터
위의 과정에서, Client name을 testvpn으로 만들었다면, 스크립트를 실행한 디렉토리에 testvpn.ovpn이라는 파일이 만들어져 있습니다.
클라이언트 시스템에서 어떤 방법, 예를 들어 이메일을 통해, 해당 파일을 받아옵니다. 그런-다음 필요한 프로그램을 설치합니다:
- sudo apt install openvpn network-manager-openvpn
그런-다음 다음 과정을 통해 설정됩니다:
- 그놈 설정, Network->VPN에서 오른쪽에 +를 누릅니다.
- Add VPN에서 Import from file...을 누릅니다.
- 받은 파일을 선택하고 Open을 누릅니다.
- 새로운 Add VPN에서 해당 정보가 올라오면, Add를 누릅니다.
- 그런다음 testvpn VPN을 켭니다.
터미널 창에서 ip addr 명령을 입력하면, tun0라는 인터페이스가 보일 것입니다.
Android client
안드로이드에서 OpenVPN 서버에 접속하기 위해, playstore에서 openvpn 클라이언트 앱을 설치할 수 있습니다.
그런-다음 서버에서 testvpn.ovpn 파일을 받아서, import하고, 안드로이드 설정에서 VPN을 사용하도록 설정할 수 있습니다.
그러나, vpn으로 접속해 있으면, 문자 다운로드가 되지 않습니다. 그때에는 vpn을 끄고 문자를 다운로드할 수 있습니다.
Troubleshootings
경고 메시지 WARNING: 'link-mtu' is used inconsistently, local='link-mtu 1549', remote='link-mtu 1521' 해결책은 server.conf와 testvpn.ovpn 파일에서 다음 설정을 각각 추가합니다: tun-mtu 1500 시스템 로고 tls-crypt unwrap error: packet too short, 포트 포워딩을 수행할 때, 프로토콜을 udp로 지정해서 방화벽을 설정해야 하는 것으로 추정됩니다. 아직 완전히 확인되지 않았습니다!!
External links
- Official website
- Community website
- Bridgett, Adrian (2 February 2008). "OpenVPN presentation and demonstration". Archive. Hampshire Linux User Group. Tech Talks