vpr을 이용한 wan/vpn 선택적 라우팅

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만을 이용하게 됩니다.

참고

Comments

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

답글 남기기

이메일 주소는 공개되지 않습니다.

  ⁄  1  =  9