Raspberry PiでモバイルVPNルータを作りたい

やりたいこと

  • WiFi APとクライアント(station)に同時になる
  • station側のIF経由でVPNトンネルを掘る
  • AP側のIFに接続した機器がVPN先のネットワークに接続できる

資材

  • Raspberry Pi Model A+
  • GW-USNANO2A : rtl8192cu
    • iwコマンドが使えない(nl80211 not found.)デバイスだとvirtual interfaceが作れないような気がする
  • WLI-UC-GNM : rt2800usb
    • 結構熱くなる
    • 1個でstationとAPを同時にやらせたかったんだがうまくいかず断念(参考:このへん)
  • GW-USValue-EZ

OSセットアップ

ソフトウェア

  • hostapd
    • rtl8192cuに対応したものを別途ダウンロードして使用
  • OpenVPN
    • 自宅のVPNサーバ(VyOS)にL2 VPN接続する
  • dnsmasq
    • station側のWLANアダプタに接続してきたクライアントにDHCPリースする
  • iptables
    • IP masqueradeとか

構成

  • WAN側はUSB有線LANアダプタ(eth0),USB接続モバイルルータ(eth1),USB無線LANアダプタ(wlan1)のいずれか
    • iptablesでIP masqueradeする
  • LAN側はUSB無線LANアダプタ(wlan0)
  • OpenVPNのtap0とwlan0をブリッジする
  • wlan0側でもDHCPサーバを動かしてtap0の先と同じネットワークアドレスのIPアドレスをリースする

GW-USNANO2AでWiFiが繋がらなくなる問題

参考


有線編

やりたいこと

  • 自宅LANを外出先にL2で延長したい
    • 家LAN — [OpenVPN client] — [OpenVPN server] — [OpenVPN client] — 外LAN

資材

  • Raspberry Pi Model B (256MB)
  • L-02C + IIJmioのSIM
    • あらかじめ AT%USBMODEM=0 しておく
  • セルフパワーなUSBハブ
    • USBポートへの電源供給に不安がなさそうなModel B+なら不要かも
  • OpenVPNサーバ(VyOS on さくらのVPS)
    • client-to-client を許可しておく
  • OpenVPNクライアント(自宅側 VyOS on KVM)

設定

  • OpenVPNサーバはあらかじめtapで接続できるようにしておく
    • easy-rsa2で証明書を用意しておく

OpenVPNクライアント

  • up スクリプトでtap0とeth0をブリッジする
  • /etc/openvpn/client.conf

    client
    proto udp
    nobind
    verb 3
    dev-type tap
    dev tap0
    cert hogehoge.crt
    key hogehoge.key
    ca ca.crt
    remote 0.0.0.0 0
    
    script-security 2
    up "/etc/openvpn/up br0 eth0"
    down "/etc/openvpn/down br0 eth0"
  • /etc/openvpn/up

    #!/bin/sh
    
    BRDEV=$1
    ETHDEV=$2
    TAPDEV=$3
    
    /sbin/brctl addif $BRDEV $TAPDEV
    /sbin/ifconfig $TAPDEV hw ether xx:xx:xx:xx:xx:xx up
    #/sbin/ifconfig $ETHDEV promisc
    /sbin/ifconfig $TAPDEV 
    exit 0
  • /etc/openvpn/down

    #!/bin/sh
    
    BRDEV=$1
    ETHDEV=$2
    TAPDEV=$3
    
    /sbin/brctl delif $BRDEV $TAPDEV
    #/sbin/ifconfig $ETHDEV -promisc
    
    exit 0
  • クライアント間のarpがうまくいってない雰囲気
    • 再接続されたときにtap0のMACが変わっちゃうからかも
    • up スクリプトで適当なMACアドレスを設定するようにした

参考


OpenWrtを試す

2020/01/11

資材

イメージ

追加パッケージ

WiFiを生かす

初回起動直後 wlan0はDOWN

# uci show wireless
 :
wireless.radio0.disaled="1"
 :
# uci set wireless.@wifi-device[0].disabled="0"
# uci show wireless
 :
wireless.radio0.disaled="0"
 :
# uci commit wireless
# wifi

この時点でwlan0がUP
wlan0はbr-lanに追加されている
これをwan側に変えるのは面倒そう

USB-LANを有効化

  • kmod-usb-net-asix
    • kmod-libphy
    • kmod-usb-net
      • kmod-mii

eth0が生える

LUA4-U3-AGTは追加でkmod-usb-asix-ax88179が必要

USB-WiFiを有効化

  • kmod-rtl8192cu
    • kmod-rtlwifi-usb
      • kmod-rtlwifi
      • kmod-mac80211
    • kmod-rtl8192c-common
    • rtl8192cu-firmware

モバイルルータ(Speed Wi-Fi NEXT W01)をUSB接続

これも eth0 として見える

OpenVPNクライアント

参考