FreeBSD 14.0에 Wireguard VPN 설치하는 방법
목차
- 소개
- 사전 요구 사항
- WireGuard VPN 설치
- WireGuard 구성
- WireGuard 클라이언트 구성 생성
- WireGuard VPN 시스템 프로세스 관리
- 방화벽 규칙 설정
- 설치 테스트
- 결론
소개
WireGuard는 기기 간에 안전한 네트워크 연결을 만들기 위해 암호화 프로토콜을 활용하는 오픈 소스 모던 VPN (Virtual Private Network) 솔루션입니다. WireGuard는 효율적이며 IPsec와 같은 전통적인 VPN 프로토콜보다 향상된 신뢰성을 제공합니다. 본 안내서에서는 FreeBSD 14.0에 WireGuard VPN을 설치하고 서버에 안전한 네트워크 터널을 구성하는 방법을 설명합니다.
사전 요구 사항
시작하기 전에 다음과 같은 사전 조건을 충족해야 합니다:
- Vultr에서 FreeBSD 14.0 서버 인스턴스를 배포합니다.
- SSH를 사용하여 서버에 액세스합니다.
- sudo 권한이 있는 루트가 아닌 사용자를 만들고 해당 계정으로 전환합니다.
WireGuard VPN 설치
다음 단계를 수행하여 서버에 최신 WireGuard VPN 패키지를 설치하세요:
- 서버의 패키지 저장소 정보를 업데이트합니다.
$ sudo pkg update
- 모든 설치된 패키지를 최신 버전으로 업그레이드합니다.
$ sudo pkg upgrade
- WireGuard를 설치합니다.
$ sudo pkg install wireguard-tools
위 명령은 wireguard-tools
패키지를 설치하며, 해당 패키지에는 wireguard
패키지와 wg
, wg-quick
등의 WireGuard 인터페이스 관리를 단순화하는 데 필요한 다른 패키지가 포함됩니다.
WireGuard 구성
WireGuard는 서버-클라이언트 아키텍처를 사용하여 네트워크 터널을 생성합니다. WireGuard 서버와 클라이언트는 인증 및 데이터 암호화에 개인 및 공개 키를 사용합니다. 클라이언트는 서버의 공개 키를 사용하여 데이터를 암호화하며 해당 데이터는 연결에만 디코딩할 수 있는 연관된 서버 개인 키를 사용하여 해독됩니다. 서버에 안전한 터널 통신을 활성화하기 위해 아래 단계를 따르세요:
- WireGuard의
/usr/local/etc/wireguard
디렉토리 권한을 소유자에게 읽기 및 쓰기 권한을 부여합니다.$ sudo chmod -R 770 /usr/local/etc/wireguard
- 해당 디렉토리로 이동합니다.
$ cd /usr/local/etc/wireguard
- WireGuard 서버용 새로운 개인 키를 생성합니다.
$ wg genkey | tee server_private.key
위 명령은 아래와 같이 생성된 개인 키 값을 복사합니다.
CHVDcFReVNu3vLwcCqpM3Wlu9mFEeJkQbVa4j4FBd2U=
- 생성된 개인 키를 기반으로 새로운 공개 키를 생성합니다.
$ wg pubkey < server_private.key > server_public.key && cat server_public.key
위 명령은 아래와 같이 생성된 공개 키 값을 복사합니다.
uSYKhXf8rbJfZNtUNuRwzAOYmjBnre3O2T+Isv4f+k0=
- 텍스트 편집기(vi 등)를 사용하여 새로운 WireGuard 서버 구성을 생성합니다.
$ sudo vi /usr/local/etc/wireguard/wg0.conf
- 다음 설정을 파일에 추가하세요. 앞서 생성한 실제 서버 개인 키로
CHVDcFReVNu3vLwcCqpM3Wlu9mFEeJkQbVa4j4FBd2U=
부분을 대체하세요.[Interface] Address = 192.168.100.1/24 SaveConfig = true ListenPort = 51820 PrivateKey = CHVDcFReVNu3vLwcCqpM3Wlu9mFEeJkQbVa4j4FBd2U=
파일을 저장하고 닫습니다. 위 구성은 192.168.100.0/24 네트워크를 사용하며 서버 주소는 192.168.100.1입니다. 구성 내용은 다음과 같습니다:
Address
: WireGuard 서버 인터페이스에서 사용할 사설 IP 서브넷을 설정합니다.SaveConfig
: 인터페이스가 다운될 때 실행 구성을 저장할 수 있게 합니다.ListenPort
: WireGuard 인터페이스로 들어오는 연결을 수신할 서버 포트를 설정합니다.PrivateKey
: WireGuard 서버의 개인 키를 설정합니다.
WireGuard 클라이언트 구성 생성
WireGuard 클라이언트 구성은 서버의 공개 키와 공용 IP 정보를 사용하여 WireGuard 서버 인터페이스에 터널 연결을 생성합니다. 각 WireGuard 클라이언트는 서버 인터페이스에 연결을 생성하기 위해 공개 키를 사용하는 고유한 공개 키를 실행합니다. WireGuard 클라이언트 구성 파일을 공유할 수 있도록 만들고 서버 인터페이스에서 활성화하려면 다음 단계를 따르세요:
- WireGuard 클라이언트용 새로운 개인 키를 생성합니다.
$ wg genkey | tee client_private.key
위 명령은 아래와 같이 생성된 개인 키 값을 복사합니다.
uIsqtxRWeDusnNYTWHdznJWfBrYe24996pfQ9jqNYmg=
- 생성된 개인 키를 기반으로 새로운 공개 키를 생성합니다.
$ wg pubkey < client_private.key > client_public.key && cat client_public.key
위 명령은 아래와 같이 생성된 공개 키 값을 복사합니다.
DPodowSBbXs+dvT4gKabLx7ecOZUhNlISPJEErOal28=
- WireGuard 클라이언트용 새로운 구성 파일을 생성합니다.
$ sudo vi /usr/local/etc/wireguard/wg_client.conf
- 다음 설정을 파일에 추가하세요. 앞서 생성한 클라이언트 개인 키로
uIsqtxRWeDusnNYTWHdznJWfBrYe24996pfQ9jqNYmg=
부분을, 서버 공개 키로uSYKhXf8rbJfZNtUNuRwzAOYmjBnre3O2T+Isv4f+k0=
부분을, WireGuard 서버의 공용 IP 주소로139.180.144.36
부분을 대체하세요.[Interface] PrivateKey = uIsqtxRWeDusnNYTWHdznJWfBrYe24996pfQ9jqNYmg= Address = 192.168.100.2/24 [Peer] PublicKey = uSYKhXf8rbJfZNtUNuRwzAOYmjBnre3O2T+Isv4f+k0= AllowedIPs = 0.0.0.0/0 Endpoint = 139.180.144.36:51820 PersistentKeepalive = 30
파일을 저장하고 닫습니다. 위 구성은 모든 네트워크 트래픽 및 서브넷
0.0.0.0/0
을 WireGuard VPN 터널을 통해 전달하는 새로운 WireGuard 클라이언트를 생성합니다. 또한 클라이언트는 WireGuard 서버에 연결될 때 사용할192.168.100.2
사설 IP 주소를 사용합니다. 구성 내용은 다음과 같습니다:PrivateKey
: WireGuard 클라이언트 개인 키를 설정합니다.Address
: WireGuard 터널에 연결되었을 때 클라이언트의 사설 IP 주소 및 서브넷을 설정합니다.PublicKey
: WireGuard 서버의 공개 키를 설정합니다.AllowedIPs
: WireGuard VPN 연결을 통해 연결할 IP 주소 및 서브넷을 지정합니다.0.0.0.0/0
로 설정되어 있으므로 모든 IP 주소 및 네트워크 인터페이스가 VPN 연결을 통해 액세스할 수 있습니다.Endpoint
: 클라이언트가 연결할 WireGuard 서버의 공용 IP 주소와 포트를 설정합니다.PersistentKeepalive
: WireGuard 서버와의 연결을 유지하기 위해 30초마다 데이터 패킷을 전송합니다.
- WireGuard 서버 구성 파일을 엽니다.
$ sudo vi /usr/local/etc/wireguard/wg0.conf
- 파일 맨 아래에 다음 구성을 추가하세요. 앞서 생성한 클라이언트 공개 키로
DPodowSBbXs+dvT4gKabLx7ecOZUhNlISPJEErOal28=
부분을 대체하세요.[Peer] # Client 1 PublicKey = DPodowSBbXs+dvT4gKabLx7ecOZUhNlISPJEErOal28= AllowedIPs = 192.168.100.2/32
위 구성은 WireGuard 클라이언트가 WireGuard 서버 인터페이스에 연결할 수 있도록 활성화합니다. 구성 내용은 다음과 같습니다:
PublicKey
: WireGuard 클라이언트의 공개 키를 설정합니다.AllowedIPs
: 지정된 키를 사용하여 연결할 수 있는 클라이언트의 사설 IP 주소를 활성화합니다.192.168.100.3
과 같은 다른 주소는 해당 키를 사용하여 연결할 수 없으며 고유한 키를 가진 새로운 클라이언트 구성을 생성해야 합니다.
- 다음 명령을 사용하여 WireGuard 서버 인터페이스
wg0
를 활성화하세요.$ sudo sysrc wireguard_interfaces="wg0"
- 안전한 전송 프로토콜 (예: scp)을 사용하여 WireGuard 클라이언트 구성 파일을 디바이스에 다운로드하세요. 예를 들어, Windows 컴퓨터에서 다음 명령을 실행하여 파일을 다운로드할 수 있습니다.
PS > scp username@your_server_ip:/usr/local/etc/wireguard/wg_client.conf .
WireGuard VPN 시스템 프로세스 관리
다음 단계를 수행하여 WireGuard VPN이 부팅시 자동으로 시작되도록 설정하세요:
- WireGuard VPN이 부팅시 자동으로 시작되도록 설정합니다.
$ sudo sysrc wireguard_enable="YES"
- WireGuard 서버를 시작합니다.
$ sudo service wireguard start
- WireGuard 서버 상태를 확인하고 활성 인터페이스 정보를 확인합니다.
$ sudo service wireguard status
아래와 유사한 출력을 확인해야 합니다.
interface: wg0 public key: uSYKhXf8rbJfZNtUNuRwzAOYmjBnre3O2T+Isv4f+k0= private key: (hidden) listening port: 51820 pvir: DPodowSBbXs+dvT4gKabLx7ecOZUhNlISPJEErOal28= allowed ips: 192.168.100.2/32
방화벽 규칙 설정
Packet Filter (pf) 방화벽은 Vultr FreeBSD 서버에서 기본적으로 활성화되어 있습니다. 서버를 보호하고 WireGuard 서버 인터페이스를 통한 네트워크 연결을 활성화하려면 다음 단계를 따르세요:
- 서버에서 IP 포워딩을 가능하게 하기 위해
sysctl.conf
파일을 수정합니다.$ echo 'net.inet.ip.forwarding=1' | sudo tee -a /etc/sysctl.conf
- 서버에서
sysctl.conf
변경 사항을 적용합니다.$ sudo sysctl -f /etc/sysctl.conf
- Packet Filter 방화벽을 활성화합니다.
$ sudo sysrc pf_enable="YES"
- Packet Filter 로그를 활성화합니다.
$ sudo sysrc pflog_enable="YES"
- 서버의 네트워크 인터페이스를 확인하고
wg0
WireGuard 인터페이스가 사용 가능한지 확인합니다.$ ifconfig
다음과 유사한 출력을 확인해야 합니다.
vtnet0: flags=1008843<UP,BROADCAST,RUNNING,SIMPLEX,MULTICAST,LOWER_UP> metric 0 mtu 1500 options=4c00ba<TXCSUM,VLAN_MTU,VLAN_HWTAGGING,JUMBO_MTU,VLAN_HWCSUM,VLAN_HWTSO,LINKSTATE,TXCSUM_IPV6> ether 56:00:04:fa:07:79 inet 139.180.144.36 netmask 0xfffffe00 broadcast 139.180.145.255 media: Ethernet autoselect (10Gbase-T <full-duplex>) status: active nd6 options=29<PERFORMNUD,IFDISABLED,AUTO_LINKLOCAL> lo0: flags=1008049<UP,LOOPBACK,RUNNING,MULTICAST,LOWER_UP> metric 0 mtu 16384 options=680003<RXCSUM,TXCSUM,LINKSTATE,RXCSUM_IPV6,TXCSUM_IPV6> inet 127.0.0.1 netmask 0xff000000 inet6 ::1 prefixlen 128 inet6 fe80::1%lo0 prefixlen 64 scopeid 0x2 groups: lo nd6 options=21<PERFORMNUD,AUTO_LINKLOCAL> wg0: flags=10080c1<UP,RUNNING,NOARP,MULTICAST,LOWER_UP> metric 0 mtu 1420 options=80000<LINKSTATE> inet 192.168.100.1 netmask 0xffffff00 groups: wg nd6 options=109<PERFORMNUD,IFDISABLED,NO_DAD>
- Packet Filter 구성 파일을 연다.
$ sudo vi /etc/pf.conf
- 다음 구성을 파일에 추가합니다. 실제 서버 공용 인터페이스 이름으로
vtnet0
를 사용합니다.ext_if = "vtnet0" wg_if = "wg0" set skip on lo scrub in on $ext_if all fragment reassemble nat on $ext_if from $wg_if:network to any -> ($ext_if) pass in on $ext_if proto udp from any to ($ext_if) port 51820 pass quick on $wg_if pass out keep state
파일을 저장하고 닫습니다. 위 방화벽 규칙은 서버에 새로운 방화벽 규칙을 적용합니다. 구성 내용은 다음과 같습니다:
ext_if
: 외부 서버 네트워크 인터페이스vtnet0
를 설정합니다.wg_if
: WireGuard 인터페이스를wg0
으로 설정합니다.set skip on lo
: 내부 트래픽 필터링을 피하기 위해 루프백 인터페이스에서 필터링을 건너뜁니다.scrub in on $ext_if all fragment reassemble
: 외부 네트워크 인터페이스에서 분할된 패킷을 재조립합니다.nat on $ext_if from $wg_if:network to any -> ($ext_if)
: WireGuard 인터페이스에서 외부 인터페이스로 패킷 전달을 위해 NAT를 사용합니다.pass in on $ext_if proto udp from any to ($ext_if) port 51820
: WireGuard UDP 포트51820
의 들어오는 연결을 허용합니다.pass quick on $wg_if
: WireGuard 인터페이스에서 모든 유형의 트래픽을 허용합니다.pass out keep state
: 모든 아웃고잉 트래픽을 활성화하고 연결 상태를 추적합니다.
- Packet Filter 방화벽을 시작합니다.
$ sudo service pf start
- 변경 사항을 적용하기 위해 Packet Filter 규칙을 다시 로드합니다.
$ sudo pfctl -f /etc/pf.conf
설치 테스트
WireGuard 서버는 WireGuard 클라이언트 패키지와 같은 호환되는 응용프로그램에서 연결을 수락합니다. WireGuard 클라이언트 응용프로그램을 설치하고 서버에 연결하기 위해 다음 단계를 수행하세요:
- 기기에 최신 WireGuard VPN 클라이언트 응용프로그램을 다운로드하여 설치하세요. 예를 들어, Windows용 WireGuard VPN을 설치하세요.
- WireGuard VPN 클라이언트 응용프로그램을 여십시오.
- 터널 추가 또는 파일에서 터널 가져오기를 클릭하여 클라이언트 구성 파일을 로드하세요.
- 이전에 다운로드한 클라이언트 구성 파일을 찾아 엽니다.
- 활성화를 클릭하여 WireGuard VPN 서버에 연결하세요.
- WireGuard 서버에 대한 네트워크 연결이 설정되고 인터페이스에서 데이터 전송이 활성화되었는지 확인하세요.
- WireGuard 서버에서 연결된 클라이언트 수를 확인하려면 WireGuard 서버에서 다음 명령을 실행합니다.
$ wg
결론
FreeBSD 14.0에 WireGuard VPN 서버를 설치하고 클라이언트를 설정하여 VPN 터널을 생성하는 방법에 대해 설명했습니다. WireGuard 설정을 통해 암호화된 데이터 전송, 안전한 액세스 및 여러 클라이언트 장치와 작업 시 필요한 효과적인 네트워크 트래픽 관리를 활성화할 수 있습니다. WireGuard VPN에 대한 자세한 내용은 WireGuard VPN 문서를 참조하세요.
출처: https://docs.vultr.com/how-to-install-wireguard-vpn-on-freebsd-14-0
안정적이고 저렴한 가상 서버(VPS) 안내
안정적인 서버 호스팅을 찾고 계신가요? 지금 Vultr 호스팅을 한번 이용 해 보세요. 지금 보고 계신 HaruLogs 사이트도 Vultr에서 VPS 호스팅 하고 있습니다. 한국, 일본, 미국등 다양한 국가에 클릭 몇번으로 안정적이고 저렴한 VPS를 운영 할 수 있습니다.
아래 배너를 통해 회원 가입을 하시면 100달러의 무료 크레딧을 받을 수 있습니다. 100달러의 무료 크레딧은 Vultr의 최소 사양 VPS를 20대 동시 운영가능한 크레딧입니다.
Vultr 서비스 요약
- VPS
- 인스턴스
- AMD 또는 Intel High Performance 인스턴스 최저 $6 - 1vCPU, 1GB Memory, 2TB Bandwidth, 25GB NVMe
- 엣지
- 인스턴스
- Block Storage
- Object Storage (AWS S3 호환)
- Firewall
- Network
- Load Balancers
- Kubernetes
- Databases