vpn policy routing을 이용하여 선택적으로 라우팅 하는 간단한 예제입니다.
우리가 웹브라우저를 통해 웹서핑(웹서핑이 됬든 뭐가 됬든)을 한다면 기본적으로 wan으로 트래픽을 라우팅을 합니다. 어떤 필요에 의해 해외의 vpn 서비스를 이용하는 경우라면 vpn이 라우팅한 경로를 따라 웹서핑을 하게 될 겁니다.
vpn을 사용하는 특별한 사정이 있겠지만 vpn이 항상 필요한것은 아니며, 그 특별한 사정이 없는 경우라면 오히려 vpn 사용으로 일상적인 웹서핑은 오히려 불편합니다. 그렇다고 그때 그때 vpn을 껏다/켰다 할 수도 없는 노릇이죠.
이럴 경우 일부 호스트/서브넷/도메인/ASN에 대해 선택적으로 wan이나 vpn으로 라우팅을 할 수 있게 하는 편리한 도구가 vpn-policy-routing입니다.
저는 따로 해외 vpn을 이용하고 있지 않기 때문에 여기서는 기존에 소개한 wgcf를 예시로 선택적 라우팅 하는 예를 소개하겠습니다. (vpr은 WAN, L2TP, Openconnect, OpenVPN, PPTP, Wireguard를 라우팅 할 수있다고 하네요)
vpn 설정
본 예시는 wgcf(wireguard)를 사용합니다. wgcf를 OpenWrt에서 사용, 설치하는 방법은 여기를 참고하세요.
서비스를 재시작하기 전에...... vpr를 이용하기 위해서는
모든 트래픽이 wgcf인터페이스를 통해 라우팅되지 않도록 wireguard 피어 설정에서 option route_allowed_ips '1' 행을 제거하거나 설정 값을 '0'으로 변경합니다. 변경한 /etc/config/network는 다음과 같습니다.
... config wireguard_wgcf option public_key 'bmXOC+F1FxEMF9dyiK2H5/1SUtzH0JuVo51h2wPfgyo=' option route_allowed_ips '0' 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' ...
서비스 재시작
/etc/init.d/network restart
/etc/init.d/firewall restart
routing 테이블 확인
routing 테이블 확인해 보면 dst 0.0.0.0/0 (default)은 eth0.2을 통해 gateway 58.xxx.xxx.xxx 로 라우팅 되도록 되어 있습니다. 따라서 라우팅 테이블에 없는 모든 트래픽은 정상적으로 wan을 통해 트래픽이 나가도록 되어 있음을 확인할 수 있습니다.
[email protected]:~# ip route show default via 58.xxx.xxx.xxx dev eth0.2 proto static src 58.xxx.xxx.xxx ... 192.168.10.0/24 dev br-lan proto kernel scope link src 192.168.10.1
vpr 설치
opkg update
opkg install vpn-policy-routing luci-app-vpn-policy-routing
vpr 설정테스트
선택적으로 라우팅이 되는지 안되는지는 간단히 웹브라우저를 통해 나의 ip 주소를 확인보면 알 수 있습니다. 국내서는 warning.go.kr 때문에 막혀있는 폰헙도 vpn을 경유한다면 볼 수 있을 겁니다. 테스트를 위해 다음과 같이 설정해 보겠습니다.
- 내부 서브넷 192.168.10.0/24 에서 목적지 주소 ipaddress.com로 접근시 wgcf 인터페이스로 라우팅한다.
- 내부 서브넷 192.168.10.0/24 에서 목적지 주소 pornhub.com로 접근시 wgcf 인터페이스로 라우팅한다.
- 내부 ip 192.168.10.11은 wgcf 인터페이스로 라우팅한다.
/etc/config/vpn-policy-routing
config policy option name 'wgcf-1' option src_addr '192.168.10.0/24' option dest_addr 'ipaddress.com' option interface 'wgcf' config policy option name 'wgcf-2' option src_addr '192.168.10.0/24' option dest_addr 'pornhub.com' option interface 'wgcf' config policy option name 'wgcf-3' option src_addr '192.168.10.11' option interface 'wgcf' config vpn-policy-routing 'config' option verbosity '2' option strict_enforcement '1' option src_ipset '0' option dest_ipset '0' option resolver_ipset 'dnsmasq.ipset' option ipv6_enabled '0' option boot_timeout '30' option iptables_rule_option 'append' option procd_reload_delay '1' option webui_enable_column '0' option webui_protocol_column '0' option webui_chain_column '0' option webui_sorting '1' option webui_show_ignore_target '1' list webui_supported_protocol 'tcp' list webui_supported_protocol 'udp' list webui_supported_protocol 'tcp udp' list webui_supported_protocol 'icmp' list webui_supported_protocol 'all' option enabled '1' config include option path '/etc/vpn-policy-routing.netflix.user' option enabled '0' config include option path '/etc/vpn-policy-routing.aws.user' option enabled '0'
vpr 서비스 시작
/etc/init.d/vpn-policy-routing enable
/etc/init.d/vpn-policy-routing start
결과
내부 192.168.10.0/24 네트워크에서 웹브라우저를 통해 ipaddress.com 에 접속하면 나의 wan 외부 ip가 아닌 cloudflare warp 서버의 8.xxx.xxx.xxx 주소를 확인할 수 있습니다. 테스트 삼아 다른 곳에서도 ip 확인을 해보세요. 또한 국내서 vpn이나 DPI를 우회하는 프로그램을 이용하지 않고서는 접근이 불가능한 pornhub.com도 vpr을 이용해 편하게?? 볼 수 있게 됬습니다. 3번째 설정으로 192.168.0.11의 외부 연결은 wgcf만을 이용하게 됩니다.
따라하다가 뭔가 이상해서 봤더니 공식문서상에서 22.03 버전이후로 vpn-policy-routing 패키지가 사라지고 pbr(policy based routing) 패키지로 대체되었네요
vpr 설정자체는 pbr로 넘어와도 거의 비슷해서 이 포스팅으로 설정 가능했습니다
공식문서상에서 보니까 22.03버전을 기점으로 vpr이 pbr(policy based routing)으로 대체되었네요
패키지이름이 pbr입니다
패키지 이름만 달라졌고, 세팅내용은 대부분 비슷해서 다행히 적용할수 있었네요
이 블로그 대부분의 글들은 두서도 없고 간단한 설명도 없이 따라하기 형식으로 되어 있다보니
openwrt가 버전업이 되면서 따라하기가 안먹히는 부분이 있습니다.
전체적으로 글들을 쉽게 리뉴얼을 하고 싶은맘은 있는데 바쁘다보니 마음뿐이네요.
말씀해주신 업데이트 정보 감사 드립니다.
그리고 조금이나마 도움 됬다니 다행입니다.^^