OpenWrt 라우터에 cloudflare warp 적용

cloudflare warp는 사용자와 사용자와 가까운 지역의 cloudflare 서버까지 wireguard 프로토콜을 이용하여 암호화 통신을 하고 사용자에게 넘겨받은 데이터를 cloudflare 서버가 대신 통신을 한 후 다시 사용자에게 암호화 통신으로 넘겨주는 방식입니다.

사용자와 cloudflare 서버간 통신시 dns는 물론 트래픽을 암호화해 인터넷 서비스 제공자나 네트워크를 공유하는 사용자로 부터의 프라이버시 침해를 방지하고 제3자가 공공 wifi 등에서의 감시를 막아줍니다. 또한 곧곧에 설치된 cloudflare 서버를 proxy server처럼 활용해 속도를 향상시킵니다.

그러나 warp은 wireguard라는 vpn 프로토콜을 이용함에도 불구하고 모든 방문한 웹사이트로부터 사용자의 ip를 숨겨주지는 않으며(해당 지역별 서비스를 위해 별도의 사용자 ip header가 존재하여 그 header를 참조하는 사이트는 사용자 ip로 인식하고 아니면 서버의 ip로 인식), 가까운 지역에 cloudflare 서버가 없을 경우 속도 향상의 이점이 별로 없습니다.(현시점 연결시 서울이 아닌 일본에 위치한 cloudflare 서버에 연결됩니다.)

고려사항

  • 국내 사이트에 로그인 할 경우 외국 ip로 인한 의심스로운 활동으로 간주해 해당 사이트에서 계정을 잠그는 일이 발생할 수 있습니다.(vpn-policy-routing 을 이용하면 해당 사이트만 wan 인터페이스로 이용하도록 할 수 있으나 굳이......)
  • 라우터에 설치시 warp on/off 가 불편합니다. 이것이 네트워크 하부 사용자 모두에게 필요한지 고려하세요. (warp가 필요하다면 개별 사용자가 pc 나 모바일 버전 앱을 설치하거나, pc에 기존부터 wireguard client를 사용중이라면 아래를 참고해 warp이용하는 것을 추천)
  • 라우터에 설치시 네트워크를 물리적이든 가상이든 분리하지 않으면 라우터 외부 통신은 warp 터널을 통해 이루어 집니다. 따라서 OpenWrt 라우터에 별도의 원격접속(ssh, vpn...)을 할 경우 접속이 이루어 지지 않습니다.

사전준비

  • wireguard 설치는 여기를 참고하세요.
  • 로컬연결 상태에서 작업 진행하세요.

cpu architecture 확인

OpenWrt 라우터의 cpu architecture를 확인합니다.

cat /proc/cpuinfo | grep model

root@OpenWrt:~# cat /proc/cpuinfo | grep model
model name      : ARMv7 Processor rev 0 (v7l)
model name      : ARMv7 Processor rev 0 (v7l)
root@OpenWrt:~#

warp 사용자 정보 및 wireguard 프로필 생성

저는 cpu architecture 확인해 보니 armv7로 확인됬습니다. https://github.com/ViRb3/wgcf/releases 에서 해당 wgcf를 다운받아 warp 사용자 정보 및 wireguard 프로필을 생성합니다.

cd ~
wget -c https://github.com/ViRb3/wgcf/releases/download/v2.2.11/wgcf_2.2.11_linux_armv7 -O wgcf
ls -al
chmod 755 wgcf
./wgcf register
./wgcf generate
cat wgcf-profile.conf

root@OpenWrt:/etc/config# cd ~
root@OpenWrt:~# wget -c https://github.com/ViRb3/wgcf/releases/download/v2.2.11/wgcf_2.2.11_linux_armv7 -O wgcf
Downloading 'https://github.com/ViRb3/wgcf/releases/download/v2.2.11/wgcf_2.2.11_linux_armv7'
Connecting to 15.164.81.167:443
Redirected to /github-production-release-asset-2e65be/255437195/0e13537a-8b5a-4978-a3f9-38aa017f92a9?X-Amz-Algorithm=AWS4-HMAC-SHA256&X-Amz-Credential=AKIAIWNJYAX4CSVEH53A%2F20220105%2Fus-east-1%2Fs3%2Faws4_request&X-Amz-Date=20220105T110136Z&X-Amz-Expires=300&X-Amz-Signature=96185537f3292a4be5008bb2a5dcccc5b390ea9cfc62e3aedb476a73871ede0f&X-Amz-SignedHeaders=host&actor_id=0&key_id=0&repo_id=255437195&response-content-disposition=attachment%3B%20filename%3Dwgcf_2.2.11_linux_armv7&response-content-type=application%2Foctet-stream on objects.githubusercontent.com
Writing to 'wgcf'
wgcf                 100% |*******************************| 10816k  0:00:00 ETA
Download completed (11075584 bytes)
root@OpenWrt:~# ls -al
drwxr-xr-x    1 root     root           224 Jan  5 11:01 .
drwxr-xr-x    1 root     root           608 Jan  1  1970 ..
-rw-r--r--    1 root     root      11075584 Jan  5 11:01 wgcf
root@OpenWrt:~# chmod 755 wgcf
root@OpenWrt:~# ./wgcf register
2022/01/05 11:02:19 Using config file: wgcf-account.toml
This project is in no way affiliated with Cloudflare
Cloudflare's Terms of Service: https://www.cloudflare.com/application/terms/
✔ Yes
2022/01/05 11:02:28 =======================================
2022/01/05 11:02:28 Device name   : B64FC5
2022/01/05 11:02:28 Device model  : PC
2022/01/05 11:02:28 Device active : true
2022/01/05 11:02:28 Account type  : free
2022/01/05 11:02:28 Role          : child
2022/01/05 11:02:28 Premium data  : 0.00 B
2022/01/05 11:02:28 Quota         : 0.00 B
2022/01/05 11:02:28 =======================================
2022/01/05 11:02:28 Successfully created Cloudflare Warp account
root@OpenWrt:~# ./wgcf generate
2022/01/05 11:02:39 Using config file: wgcf-account.toml
2022/01/05 11:02:40 =======================================
2022/01/05 11:02:40 Device name   : B64FC5
2022/01/05 11:02:40 Device model  : PC
2022/01/05 11:02:40 Device active : true
2022/01/05 11:02:40 Account type  : free
2022/01/05 11:02:40 Role          : child
2022/01/05 11:02:40 Premium data  : 0.00 B
2022/01/05 11:02:40 Quota         : 0.00 B
2022/01/05 11:02:40 =======================================
2022/01/05 11:02:40 Successfully generated WireGuard profile: wgcf-profile.conf
root@OpenWrt:~#
root@OpenWrt:~#
root@OpenWrt:~# cat wgcf-profile.conf
[Interface]
PrivateKey = 2EPhU33FYBqqxT80kFNdSxFAkAlExlsqMXsYCi/SFlo=
Address = 172.16.0.2/32
Address = fd01:5ca1:ab1e:8c22:801a:851:3326:253b/128
DNS = 1.1.1.1
MTU = 1280
[Peer]
PublicKey = bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=
AllowedIPs = 0.0.0.0/0
AllowedIPs = ::/0
Endpoint = engage.cloudflareclient.com:2408
root@OpenWrt:~#

warp+ 사용자를 위한 추가 설정

warp+ 사용자는 스마트폰이나 윈도우에 기 설치된 1.1.1.1앱을 열어 라이센스키를 확인하고 위에서 wgcf register 명령으로 생성된 wgcf-account.toml 화일내 라이센스 키를 확인된 라이센스키로 편집기를 이용해 교체합니다. 교체 후 wgcf update, wgcf generate명령을 재수행합니다.

wireguard 인터페이스 추가

위에서 생성된 wgcf-profile.conf 내용을 OpenWrt config 설정에 맞게 /etc/config/network 화일에 추가합니다.

vi /etc/config/network

...
config interface 'wgcf'
        option proto 'wireguard'
        option private_key '2EPhU33FYBqqxT80kFNdSxFAkAlExlsqMXsYCi/SFlo='
        option mtu '1280'
        list addresses '172.16.0.2/32'
        list addresses 'fd01:5ca1:ab1e:8c22:801a:851:3326:253b/128'

config wireguard_wgcf
        option public_key 'bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo='
        option route_allowed_ips '1'
        option endpoint_host 'engage.cloudflareclient.com'
        option endpoint_port '2408'
        option persistent_keepalive '25'
        list allowed_ips '0.0.0.0/0'
        list allowed_ips '::/0'

firewall zone

/etc/config/network에 신규 추가한 interface 'wgcf' 에 대한 방화벽 zone을 생성하고 lan zone 트래픽이 wgcf로 포워딩 할 수 있도록 설정합니다.

vi /etc/config/firewall

...
config zone
        option name 'wgcf'
        option input 'REJECT'
        option output 'ACCEPT'
        option forward 'REJECT'
        option masq '1'
        option mtu_fix '1'
        list network 'wgcf'

config forwarding
        option src 'lan'
        option dest 'wgcf'
...

< 내용 업데이트 >

지금보니 위에처럼 새로운 wgcf 방화벽 존을 만드는게 의미가 없네요. 방화벽 정책이 wan zone하고 똑같으니 wan zone에 추가하는게 더 깔끔합니다.

...
config zone
        option name 'wan'
        option input 'REJECT'
        option output 'ACCEPT'
        option forward 'REJECT'
        option masq '1'
        option mtu_fix '1'
        list network 'wan'
        list network 'wan6'
        list network 'wgcf'

config forwarding
        option src 'lan'
        option dest 'wan'
...

서비스 재시작

원격접속의 경우 네트워크 연결이 끊어지며 재연결 할 수 없습니다. 로컬에서 실행하세요.

/etc/inint.d/firewall restart
/etc/init.d/network restat

상태확인

./wgcf status
./wgcf trace

참고

Comments

No comments yet. Why don’t you start the discussion?

답글 남기기

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