본문 바로가기
서버 및 보안

OpenVPN

by 다움위키 2023. 12. 25.

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

제공되는 설치 스크립트가 있기 때문에, 그것을 사용해서 쉽게 설치할 수 있습니다:

스크립트 내부에 몇 가지 정보와 질문이 나타납니다:

  • 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 nametestvpn으로 만들었다면, 스크립트를 실행한 디렉토리에 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