,

open VPN vs wireguard

wireguard가 현대적이고 빠르며, 보안에 뛰어나다고 홍보합니다.
얼마나 빠를까?

오라클 A1에서는 해본적 없지만 오라클 E2를 기준으로 openvpn이 더 빠릅니다.
핑, 핑의 편차, 최대 다운로드, 최대 업로드 모두 좋았지요.

나중에 A1에서도 해볼 필요가 있겠지만, openvpn은 아래 옵션만 넣으면 정말 빨라집니다.

duplicate-cn
client-to-client
sndbuf 294912
rcvbuf 393216
fast-io

핑과 다운 속도 실험 방법이 이와 같았습니다.
폰으로는 speedtest로 다운로드를 하는 동안 컴퓨터에서는 google로 ping을 보냈습니다.
핑과 속도를 따로 확인하지 않은 것이 openvpn에게 유리한 점수를 준 것일지도 모르겠습니다.
어쨋든 그런 환경에서 분명히 cpu 사용량도 더 적었고, cpu 사양이 더 낮아도 wireguard보다 더 빠를것으로 예상되었습니다.

게다가 조금 느릴지라도 꼭 openvpn을 써야 하는 이유가 있었습니다. (실제로는 아래 장점에 더해서 더 빨랐지만요.)
openVPN의 최장점은 바로 duplicat-cn 옵션이죠.
하나의 openvpn 파일에 ip가 하나가 할당되지 않습니다.
콜라.openvpn 파일 하나로 저의 맥, 윈도, 아이패드, 아이폰 다 사용 가능하다는 것입니다.
콜라랑 환타 openvpn 프로필을 만들고, 환타에게는 하나의 파일만 공유하면 됩니다.

반면 wireguard는 각각 따로 만들어줘야 합니다.
3명이 각각 10대씩 갖고 있으면 30개를 만들어줘야 합니다.
그것도 cli로 말이죠.

그럼 이번에는 왜 wireguard?

web UI로 관리할 수 있게 되었기 때문입니다.
wg easy
openVPN도 webUI로 관리할 수 있게 해주는 openVPN Access server가 있습니다.
하지만.. arm docker로는 없죠.

그러니까 docker를 사용하려고 한다면 openvpn은 한번 cli로 세팅한 후에 평생 안건드릴 생각을 해야하고, wireguard는 기기 하나 추가될 때마다 추가하고 삭제할 생각으로 사용해야 합니다.
그리고 저의 경우 A1은 삭제하면 안되니 블럭 볼륨에 설치해야 하므로 docker는 필수입니다.

결국 미래를 고려했을 때 편하게 추가하고 제거하며, 외부에서도 쉽게 관리할 수 있는 wireguard easy를 선택하게 되었습니다.
밖에 나가서 기기가 보안 접속이 필요해졌을때 vpn을 생성해서 접속할 수 있으니까요.

설치

제가 사용한 wireguard는 이 docker입니다.
weejewel/wg-easy

저는 docker compose를 사랑하므로 docker compose로 설명을 드리겠습니다.

version: '3.7'

networks:
  default:
    external: true
    name: asdf

services:
  wgeasy:
    image: weejewel/wg-easy
    container_name: wireguard
    environment:
      # 필수 설정
      - WG_HOST= #wireguard server의 IP or DDNS
      #Optional
      - PASSWORD=password #설정되어있지 않으면 도메인만 알면 누구나 추가/삭제 가능.
      - WG_PORT=51830 #포트 변경시 사용.
      - WG_ALLOWED_IPS=0.0.0.0/0,::/0 ##vpn을 타고 나갈 ip
#      - WG_MTU=null
#      - WG_PERSISTENT_KEEPALIVE=0
#      - WG_DEFAULT_ADDRESS=10.8.0.x #연결될 클라이언트에 대여할 ip 범위
      - WG_DEFAULT_DNS=10.1.1.1 #DNS 서버. docker가 실행중인 서버의 로컬 서버를 사용해도 된다.
#      - WG_DEFAULT_DNS=1.1.1.1
#      - WG_POST_UP= #하단에서 설명 예정.
#      - WG_POST_DOWN=
    volumes:
      - ./wg-easy:/etc/wireguard
    ports:
      - 51830:51820/udp #외부는 변경해도, 내부는 무조건 51820입니다.
#      - 51821:51821/tcp #web ui
    restart: always
    cap_add:
      - NET_ADMIN
      - SYS_MODULE
    sysctls:
      - net.ipv4.ip_forward=1
      - net.ipv4.conf.all.src_valid_mark=1

여기서 중요한 옵션은 4가지입니다.
WG_HOST : server IP or HOST입니다.
WG_port: 생성된 프로파일에서 서버의 IP 뒤에 붙는 포트를 변경합니다.
보안을 위해서 포트는 가능하면 변경해서 사용합시다^^
절대로 서버의 listening 포트를 변경하지 않습니다.
여기서 WG_PORT를 변경해도
내부 통신 포트가 변경되는 것은 아닙니다.
따라서 포트 설정에 주의해야 합니다.
내부 51820 포트에 대응하는 외부 포트는 WG_PORT와 같게 하되, 내부 포트는 51820으로 해야 합니다.
WG_ALLOWED_IPS는 연결된 클라이언트가 VPN 서버로 전송할 IP 범위입니다.
10.0.8.x/24를 제외한 영역만 WG_ALLOWED_IPS에 넣게되면 로컬 통신은 불가능하게 되겠죠.

아래는 그렇게 중요하지 않습니다.
필요한경우
WG_DEFAULT_ADDRESS : 연결될 클라이언트에 IP 대여할 ‘기본’ 범위입니다.
WG_DEFAULT_ADDRESS를 수정하는 것은 상관 없지만,
와이어 가드 새로운 연결을 만든 후에 WG_DEFAULT_ADDRESS 범위 밖의 IP도 설정은 가능합니다.
대신 WG_DEFAULT_ADDRESS 범위 밖의 IP를 설정하는 경우 경우 WG_POST_UP을 수정하여 iptables를 수정해주어야합니다.

WG_DEFAULT_DNS: 연결된 클라이언트가 DNS 서버로 사용할 DNS 서버를 설정합니다.
저의 경우 wireguard가 설치된 인스턴스에 adguard dns server도 세팅되어있는데, 이 adguard dns 서버의 로컬 ip가 10.1.1.1입니다.
로컬 ip도 작동하는 것을 확인했습니다.

네트워크가 bridge가 아닌 host인 경우 포트 변경이 불가능하겠네요.

설치 완료 화면

debugging

안타깝게도 저는 한번에 실행이 안되었습니다.
docker compose up을 했을 때 아래와 같은 에러가 나오면서 계속 컨테이너가 죽었습니다.
can't initialize iptables table nat': Table does not exist
ip tables에 nat 테이블이 없다고 하는데, sudo iptables -L를 입력하면 또 정상적으로 iptables가 작동하는 것을 볼수 있었습니다.
이 때 modbrobe로 iptables의 일부 테이블 오류를 해결할 수 있다고 합니다.
sudo modprobe ip_tables

답글 남기기

이메일 주소는 공개되지 않습니다. 필수 필드는 *로 표시됩니다


Ads Blocker Image Powered by Code Help Pro

광고 차단 감지됨!

닫기를 누르면 이용하실 수 있지만, 광고 차단은 해제해주시면 좋겠습니다.
Powered By
Best Wordpress Adblock Detecting Plugin | CHP Adblock