WireGuard ๋ฐ Raspberry Pi๋ฅผ ์„œ๋ฒ„๋กœ ์‚ฌ์šฉํ•˜์—ฌ ๊ฐ„๋‹จํ•œ VPN ์„ค์ •

WireGuard ๋•Œ๋ฌธ์— ์ผ๋ถ€๊ฐ€ ๋  ๊ฒƒ์ด๋‹ค ๊ณง ์ถœ์‹œ๋  Linux ์ปค๋„ 5.6์—์„œ ์ด VPN์„ ๋‚ด ์ปค๋„๊ณผ ํ†ตํ•ฉํ•˜๋Š” ๊ฐ€์žฅ ์ข‹์€ ๋ฐฉ๋ฒ•์„ ์•Œ์•„๋ณด๊ธฐ๋กœ ๊ฒฐ์ •ํ–ˆ์Šต๋‹ˆ๋‹ค. Raspberry Pi์˜ LTE ๋ผ์šฐํ„ฐ/์•ก์„ธ์Šค ํฌ์ธํŠธ.

ะžะฑะพั€ัƒะดะพะฒะฐะฝะธะต

  • LTE ๋ชจ๋“ˆ๊ณผ ๊ณต์šฉ IP ์ฃผ์†Œ๋ฅผ ๊ฐ–์ถ˜ Raspberry Pi 3. ์—ฌ๊ธฐ์— VPN ์„œ๋ฒ„๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค(์ดํ•˜ ํ…์ŠคํŠธ์—์„œ๋Š” ์ด๋ฅผ ํ˜ธ์ถœํ•จ). ์—ฃ์ง€์›Œ์ปค)
  • ๋ชจ๋“  ํ†ต์‹ ์— VPN์„ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” Android ํœด๋Œ€ํฐ
  • ๋„คํŠธ์›Œํฌ ๋‚ด์—์„œ VPN๋งŒ ์‚ฌ์šฉํ•ด์•ผ ํ•˜๋Š” Linux ๋…ธํŠธ๋ถ

VPN์— ์—ฐ๊ฒฐ๋˜๋Š” ๋ชจ๋“  ์žฅ์น˜๋Š” ๋‹ค๋ฅธ ๋ชจ๋“  ์žฅ์น˜์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์˜ˆ๋ฅผ ๋“ค์–ด, ๋‘ ์žฅ์น˜๊ฐ€ ๋ชจ๋‘ VPN ๋„คํŠธ์›Œํฌ์˜ ์ผ๋ถ€์ธ ๊ฒฝ์šฐ ์ „ํ™”๊ธฐ๋Š” ๋…ธํŠธ๋ถ์˜ ์›น ์„œ๋ฒ„์— ์—ฐ๊ฒฐํ•  ์ˆ˜ ์žˆ์–ด์•ผ ํ•ฉ๋‹ˆ๋‹ค. ์„ค์ •์ด ๋งค์šฐ ๊ฐ„๋‹จํ•˜๋‹ค๋ฉด (์ด๋”๋„ท์„ ํ†ตํ•ด) ๋ฐ์Šคํฌํ†ฑ์„ VPN์— ์—ฐ๊ฒฐํ•˜๋Š” ๊ฒƒ์„ ๊ณ ๋ คํ•ด ๋ณผ ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

์œ ์„  ๋ฐ ๋ฌด์„  ์—ฐ๊ฒฐ์˜ ๋ณด์•ˆ์ด ์‹œ๊ฐ„์ด ์ง€๋‚จ์— ๋”ฐ๋ผ ์ ์  ๋” ์ทจ์•ฝํ•ด์ง€๊ณ  ์žˆ๋‹ค๋Š” ์ ์„ ๊ณ ๋ คํ•˜๋ฉด(ํ‘œ์  ๊ณต๊ฒฉ, KRACK WPA2 ํฌ๋ž˜ํ‚น ๊ณต๊ฒฉ ะธ WPA3์— ๋Œ€ํ•œ Dragonblood ๊ณต๊ฒฉ), ์ €๋Š” ์–ด๋–ค ํ™˜๊ฒฝ์— ์žˆ๋“  ๋ชจ๋“  ์žฅ์น˜์— WireGuard๋ฅผ ์‚ฌ์šฉํ•˜๋Š” ๊ฒƒ์„ ์ง„์ง€ํ•˜๊ฒŒ ๊ณ ๋ คํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค.

์†Œํ”„ํŠธ์›จ์–ด ์„ค์น˜

WireGuard๊ฐ€ ์ œ๊ณตํ•˜๋Š” ๋ฏธ๋ฆฌ ์ปดํŒŒ์ผ๋œ ํŒจํ‚ค์ง€ ๋Œ€๋ถ€๋ถ„์˜ Linux, Windows ๋ฐ macOS ๋ฐฐํฌํŒ์— ์ ์šฉ๋ฉ๋‹ˆ๋‹ค. Android ๋ฐ iOS ์•ฑ์€ ์•ฑ ๋””๋ ‰ํ„ฐ๋ฆฌ๋ฅผ ํ†ตํ•ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค.

๋‚˜๋Š” ์ตœ์‹  Fedora Linux 31์„ ๊ฐ€์ง€๊ณ  ์žˆ๋Š”๋ฐ ๋„ˆ๋ฌด ๊ฒŒ์„๋Ÿฌ์„œ ์„ค์น˜ํ•˜๊ธฐ ์ „์— ์„ค๋ช…์„œ๋ฅผ ์ฝ์ง€ ๋ชปํ–ˆ์Šต๋‹ˆ๋‹ค. ๋ฐฉ๊ธˆ ํŒจํ‚ค์ง€๋ฅผ ์ฐพ์•˜์Šต๋‹ˆ๋‹ค. wireguard-tools, ์„ค์น˜ํ–ˆ์ง€๋งŒ ์™œ ์•„๋ฌด๊ฒƒ๋„ ์ž‘๋™ํ•˜์ง€ ์•Š๋Š”์ง€ ์•Œ ์ˆ˜ ์—†์—ˆ์Šต๋‹ˆ๋‹ค. ์ถ”๊ฐ€ ์กฐ์‚ฌ ๊ฒฐ๊ณผ ํŒจํ‚ค์ง€๊ฐ€ ์„ค์น˜๋˜์–ด ์žˆ์ง€ ์•Š์€ ๊ฒƒ์œผ๋กœ ๋‚˜ํƒ€๋‚ฌ์Šต๋‹ˆ๋‹ค. wireguard-dkms (๋„คํŠธ์›Œํฌ ๋“œ๋ผ์ด๋ฒ„ ์‚ฌ์šฉ) ํ•˜์ง€๋งŒ ๋‚ด ๋ฐฐํฌ ์ €์žฅ์†Œ์—๋Š” ์—†์—ˆ์Šต๋‹ˆ๋‹ค.

์ง€์นจ์„ ์ฝ์—ˆ๋‹ค๋ฉด ์˜ฌ๋ฐ”๋ฅธ ์กฐ์น˜๋ฅผ ์ทจํ–ˆ์„ ๊ฒƒ์ž…๋‹ˆ๋‹ค.

$ sudo dnf copr enable jdoss/wireguard
$ sudo dnf install wireguard-dkms wireguard-tools

๋‚ด Raspberry Pi์— Raspbian Buster ๋ฐฐํฌํŒ์ด ์„ค์น˜๋˜์–ด ์žˆ๋Š”๋ฐ ์ด๋ฏธ ํŒจํ‚ค์ง€๊ฐ€ ์žˆ์Šต๋‹ˆ๋‹ค. wireguard, ์„ค์น˜:

$ sudo apt install wireguard

๋‚ด Android ํœด๋Œ€ํฐ์— ์• ํ”Œ๋ฆฌ์ผ€์ด์…˜์„ ์„ค์น˜ํ–ˆ์Šต๋‹ˆ๋‹ค. ์™€์ด์–ด๊ฐ€๋“œ VPN ๊ณต์‹ Google App Store ์นดํƒˆ๋กœ๊ทธ์—์„œ.

ํ‚ค ์„ค์น˜

ํ”ผ์–ด ์ธ์ฆ์˜ ๊ฒฝ์šฐ Wireguard๋Š” ๊ฐ„๋‹จํ•œ ๊ฐœ์ธ/๊ณต๊ฐœ ํ‚ค ์ฒด๊ณ„๋ฅผ ์‚ฌ์šฉํ•˜์—ฌ VPN ํ”ผ์–ด๋ฅผ ์ธ์ฆํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ VPN ํ‚ค๋ฅผ ์‰ฝ๊ฒŒ ๋งŒ๋“ค ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ wg genkey | tee wg-laptop-private.key |  wg pubkey > wg-laptop-public.key
$ wg genkey | tee wg-server-private.key |  wg pubkey > wg-server-public.key
$ wg genkey | tee wg-mobile-private.key |  wg pubkey > wg-mobile-public.key

๊ทธ๋Ÿฌ๋ฉด ์„ธ ๊ฐœ์˜ ํ‚ค ์Œ(64๊ฐœ ํŒŒ์ผ)์ด ์ œ๊ณต๋ฉ๋‹ˆ๋‹ค. ๊ตฌ์„ฑ์˜ ํŒŒ์ผ์„ ์ฐธ์กฐํ•˜์ง€ ์•Š๊ณ  ์—ฌ๊ธฐ์— ๋‚ด์šฉ์„ ๋ณต์‚ฌํ•ฉ๋‹ˆ๋‹ค. ๊ฐ ํ‚ค๋Š” baseXNUMX์—์„œ ํ•œ ์ค„์ž…๋‹ˆ๋‹ค.

VPN ์„œ๋ฒ„์šฉ ๊ตฌ์„ฑ ํŒŒ์ผ ์ƒ์„ฑ(Raspberry Pi)

๊ตฌ์„ฑ์€ ๋งค์šฐ ๊ฐ„๋‹จํ•ฉ๋‹ˆ๋‹ค. ๋‹ค์Œ ํŒŒ์ผ์„ ๋งŒ๋“ค์—ˆ์Šต๋‹ˆ๋‹ค. /etc/wireguard/wg0.conf:

[Interface]
Address = 10.200.200.1/24
ListenPort = 51820
PrivateKey = <copy private key from wg-server-private.key>
PostUp   = iptables -A FORWARD -i %i -j ACCEPT; iptables -t nat -A POSTROUTING -o wwan0 -j MASQUERADE
PostDown = iptables -D FORWARD -i %i -j ACCEPT; iptables -t nat -D POSTROUTING -o wwan0 -j MASQUERADE

[Peer]
# laptop
PublicKey = <copy public key from wg-laptop-public.key>
AllowedIPs = 10.200.200.2/32

[Peer]
# mobile phone
PublicKey = <copy public key from wg-mobile-public.key>
AllowedIPs = 10.200.200.3/32

๋ช‡ ๊ฐ€์ง€ ์ฐธ๊ณ  ์‚ฌํ•ญ:

  • ์ ์ ˆํ•œ ์œ„์น˜์— ํ‚ค๊ฐ€ ์žˆ๋Š” ํŒŒ์ผ์˜ ์ค„์„ ์‚ฝ์ž…ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ๋‚ด VPN์ด ๋‚ด๋ถ€ ๋ฐด๋“œ๋ฅผ ์‚ฌ์šฉํ•˜๊ณ  ์žˆ์Šต๋‹ˆ๋‹ค. 10.200.200.0/24
  • ํŒ€์šฉ PostUp/PostDown ์™ธ๋ถ€ ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค wwan0์ด ์žˆ๋Š”๋ฐ ๋‹ค๋ฅธ ์ธํ„ฐํŽ˜์ด์Šค(์˜ˆ: eth0)๊ฐ€ ์žˆ์„ ์ˆ˜๋„ ์žˆ์Šต๋‹ˆ๋‹ค.

VPN ๋„คํŠธ์›Œํฌ๋Š” ๋‹ค์Œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•˜์—ฌ ์‰ฝ๊ฒŒ ์ƒ์„ฑ๋ฉ๋‹ˆ๋‹ค.

$ sudo wg-quick up wg0

ํ•œ ๊ฐ€์ง€ ์ž‘์€ ์„ธ๋ถ€ ์‚ฌํ•ญ: ๋‚ด๊ฐ€ ์‚ฌ์šฉํ•œ DNS ์„œ๋ฒ„๋กœ dnsmasq ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค์— ์—ฐ๊ฒฐ๋จ br0, ์žฅ์น˜๋„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค wg0 ํ—ˆ์šฉ๋œ ์žฅ์น˜ ๋ชฉ๋ก์œผ๋กœ ์ด๋™ํ•ฉ๋‹ˆ๋‹ค. dnsmasq์—์„œ๋Š” ๊ตฌ์„ฑ ํŒŒ์ผ์— ์ƒˆ ๋„คํŠธ์›Œํฌ ์ธํ„ฐํŽ˜์ด์Šค ์ค„์„ ์ถ”๊ฐ€ํ•˜์—ฌ ์ด๋ฅผ ์ˆ˜ํ–‰ํ•ฉ๋‹ˆ๋‹ค. /etc/dnsmasq.conf์˜ˆ :

interface=br0
interface=wg0

๋˜ํ•œ UDP ์ˆ˜์‹  ํฌํŠธ(51280)์— ๋Œ€ํ•œ ํŠธ๋ž˜ํ”ฝ์„ ํ—ˆ์šฉํ•˜๋Š” iptable ๊ทœ์น™์„ ์ถ”๊ฐ€ํ–ˆ์Šต๋‹ˆ๋‹ค.

$ sudo iptables -I INPUT -p udp --dport 51820 -j ACCEPT

์ด์ œ ๋ชจ๋“  ๊ฒƒ์ด ์ž‘๋™ํ•˜๋ฏ€๋กœ VPN ํ„ฐ๋„์˜ ์ž๋™ ์‹œ์ž‘์„ ์„ค์ •ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ sudo systemctl enable [email protected]

๋…ธํŠธ๋ถ์˜ ํด๋ผ์ด์–ธํŠธ ๊ตฌ์„ฑ

๋…ธํŠธ๋ถ์—์„œ ๊ตฌ์„ฑ ํŒŒ์ผ ๋งŒ๋“ค๊ธฐ /etc/wireguard/wg0.conf ๋™์ผํ•œ ์„ค์ •์œผ๋กœ:

[Interface]
Address = 10.200.200.2/24
PrivateKey = <copy private key from wg-laptop-private.key>

[Peer]
PublicKey = <copy public key from wg-server-public.key>
AllowedIPs = 10.200.200.0/24
Endpoint = edgewalker:51820

์ฐธ๊ณ  ์‚ฌํ•ญ :

  • Edgewalker ๋Œ€์‹  ๊ณต์šฉ IP ๋˜๋Š” VPN ์„œ๋ฒ„ ํ˜ธ์ŠคํŠธ๋ฅผ ์ง€์ •ํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค.
  • ์„ค์ •ํ•˜์—ฌ AllowedIPs ์— 10.200.200.0/24, ์šฐ๋ฆฌ๋Š” VPN์„ ์‚ฌ์šฉํ•˜์—ฌ ๋‚ด๋ถ€ ๋„คํŠธ์›Œํฌ์— ์•ก์„ธ์Šคํ•ฉ๋‹ˆ๋‹ค. ๋‹ค๋ฅธ ๋ชจ๋“  IP ์ฃผ์†Œ/์„œ๋ฒ„์— ๋Œ€ํ•œ ํŠธ๋ž˜ํ”ฝ์€ ๊ณ„์†ํ•ด์„œ "์ผ๋ฐ˜" ๊ณต๊ฐœ ์ฑ„๋„์„ ํ†ต๊ณผํ•ฉ๋‹ˆ๋‹ค. ๋˜ํ•œ ๋…ธํŠธ๋ถ์— ๋ฏธ๋ฆฌ ๊ตฌ์„ฑ๋œ DNS ์„œ๋ฒ„๋ฅผ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค.

ํ…Œ์ŠคํŠธ ๋ฐ ์ž๋™ ์‹คํ–‰์„ ์œ„ํ•ด ๋™์ผํ•œ ๋ช…๋ น์„ ์‚ฌ์šฉํ•ฉ๋‹ˆ๋‹ค. wg-quick ะธ systemd:

$ sudo wg-quick up wg0
$ sudo systemctl enable [email protected]

Android ํœด๋Œ€ํฐ์—์„œ ํด๋ผ์ด์–ธํŠธ ์„ค์ •

Android ํœด๋Œ€ํฐ์˜ ๊ฒฝ์šฐ ๋งค์šฐ ์œ ์‚ฌํ•œ ๊ตฌ์„ฑ ํŒŒ์ผ์„ ์ƒ์„ฑํ•ฉ๋‹ˆ๋‹ค. mobile.conf):

[Interface]
Address = 10.200.200.3/24
PrivateKey = <copy private key from wg-mobile-private.key>
DNS = 10.200.200.1
        
[Peer]
PublicKey = <copy public key from wg-server-public.key>
AllowedIPs = 0.0.0.0/0
Endpoint = edgewalker:51820

๋…ธํŠธ๋ถ์˜ ๊ตฌ์„ฑ๊ณผ ๋‹ฌ๋ฆฌ ์ „ํ™”๊ธฐ๋Š” VPN ์„œ๋ฒ„๋ฅผ DNS ์„œ๋ฒ„๋กœ ์‚ฌ์šฉํ•ด์•ผ ํ•ฉ๋‹ˆ๋‹ค(๋ผ์ธ DNS), VPN ํ„ฐ๋„(AllowedIPs = 0.0.0.0/0).

ํŒŒ์ผ์„ ๋ชจ๋ฐ”์ผ ์žฅ์น˜์— ๋ณต์‚ฌํ•˜๋Š” ๋Œ€์‹  QR ์ฝ”๋“œ๋กœ ๋ณ€ํ™˜ํ•  ์ˆ˜ ์žˆ์Šต๋‹ˆ๋‹ค.

$ sudo apt install qrencode
$ qrencode -t ansiutf8 < mobile.conf

QR ์ฝ”๋“œ๋Š” ์ฝ˜์†”์— ASCII๋กœ ์ถœ๋ ฅ๋ฉ๋‹ˆ๋‹ค. Android VPN ์•ฑ์—์„œ ์Šค์บ”ํ•  ์ˆ˜ ์žˆ์œผ๋ฉฐ ์ž๋™์œผ๋กœ VPN ํ„ฐ๋„์„ ์„ค์ •ํ•ฉ๋‹ˆ๋‹ค.

์ถœ๋ ฅ

WireGuard ์„ค์ •์€ OpenVPN์— ๋น„ํ•ด ์ •๋ง ๋งˆ์ˆ ์ ์ž…๋‹ˆ๋‹ค.

์ถœ์ฒ˜ : habr.com

์ฝ”๋ฉ˜ํŠธ๋ฅผ ์ถ”๊ฐ€