Raspberry PiでモバイルVPNルータを作りたい
このページはX年以上前に更新されたものです。
内容が陳腐化している恐れがあります。ご注意ください。
Table of Contents
TL;DR
- OpenWrtでだいたいなんとかなるんじゃね
Raspbian編
やりたいこと
- 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セットアップ
- debian-pi/raspbian-ua-netinst ・ GitHubを使用
- セットアップはLANポートのあるModel B上で実施
ソフトウェア
- 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が繋がらなくなる問題
- dmesgにこんなんが出る
rtw_cmd_thread: DriverStopped(0) SurpriseRemoved(1) break at line 482
- /boot/config.txt で
max_usb_current=1
してる - /etc/modprobe.d/8192cu.conf で
options 8192cu rtw_power_mgnt=0 rtw_enusbss=0
してる
- /boot/config.txt で
-
やまたいブログ : Raspberry Pi にUSB Wifi ドングルをつける - livedoor Blog(ブログ)
- /boot/cmdline.txt に
dwc_otg.speed=1
を追記 - RPi cmdline.txt - eLinux.org
- /boot/cmdline.txt に
参考
- Overview | Setting up a Raspberry Pi as a WiFi access point | Adafruit Learning System
- Fix problem with 8192cu wireless chip (solution included) ・ Issue #217 ・ xbianonpi/xbian ・ GitHub
- Wireless network configuration - ArchWiki
- 無線LANテ゛ハ゛イスについて(kernelレヘ゛ル)
- Software access point - ArchWiki
- [ubuntu] Change wlan1 to wlan0
- linux - How to permanently add wireless interfaces with iw - Super User
- oblique/create_ap ・ GitHub
- Raspberry Pi をTorルータにするメモ ? (n)
- Multiple SSIDs with hostapd - Wiki
- kreisel.fam.cx/webmaster/Debian/RaspberryPi/raspberryPi-G300UA.html
- manty’s blog: Wifi repeater (AP and STA with one radio) using Debian
- Jens Segers - Realtek RTL8188 based access point on Raspberry Pi
有線編
やりたいこと
- 自宅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アドレスを設定するようにした
参考
- OpenVPNで拠点間L2接続 - Qiita
- How To | OpenVPN.JP
- Raspberry Pi 2 (Raspbian: jessie) でIPアドレスを固定する - Qiita
- L-02Cを最初からUSBモデムで認識させる/手動でAPN登録する - /dev/stkinosh
- Qaplaの覚書・メモ・備忘録・独言 Raspberry Pi をUSBモデムでインターネット接続
- Set a fixed MAC address on a TAP interface (OpenVPN client) on Tomato Firmware 1.28.0000 MIPSR2-101 K26 USB AIO-64K and maybe on others
OpenWrtを試す
2020/01/11
資材
- Raspberry Pi Zero W
- サンワサプライ LAN-ADUSBRJ45 (ASIX AX88772A)
- BUFFALO LUA4-U3-AGT (ASIX AX88179)
-
PLANEX GW-USNANO2A (RTL8188CUS)
- PLANEX GW-450S (RTL8811AU) にしたい
- 参考: 開発者向け情報|無線LAN USBアダプタ|プラネックス
- Premium Raspberry Pi Zero Case – The Pi Hut
イメージ
追加パッケージ
-
Index of /releases/18.06.5/targets/brcm2708/bcm2708/packages/
- kmod-usb-net_4.9.198-1_arm_arm1176jzf-s_vfp.ipk
- kmod-usb-net-asix_4.9.198-1_arm_arm1176jzf-s_vfp.ipk
-
kmod-rtl8192cu_4.9.198+2017-11-01-10_arm_arm1176jzf-s_vfp.ipk
- Index of /releases/18.06.5/packages/arm_arm1176jzf-s_vfp/base/
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
- kmod-rtlwifi-usb
モバイルルータ(Speed Wi-Fi NEXT W01)をUSB接続
- kmod-usb-net-rndis をインストール
- kmod-usb-net-cdc-ether もインストールされる
- CD-ROMドライブに見えている
- usb-modeswitch も必要
- libusb-1.0 もインストールされる
これも eth0 として見える
OpenVPNクライアント
参考
- Raspberry Pi 3 や Zero W に OpenWrt/LEDE 18.06 をインストールしてルータにする - pslaboが試したことの記録
- 2500円で作るwifiルータ【Raspberry Pi Zero W】 – Algernon’s Laboratory
OpenWrtを21.02.1に更新
2021/11/30
資材
- Raspberry Pi Zero W
- BUFFALO LUA4-U3-AGT (ASIX AX88179)
- PLANEX GW-USNANO2A (RTL8188CUS)
イメージ
追加パッケージ
- Index of /releases/21.02.1/targets/bcm27xx/bcm2708/packages/
- Index of /releases/21.02.1/packages/arm_arm1176jzf-s_vfp/base/
USB-WiFiを生かす (rtl8192cu)
コンソールからパッケージをインストール
- kmod-rtl8192cu
- kmod-rtlwifi-usb
- kmod-rtlwifi
- kmod-mac80211
- kmod-rtl8192c-common
- rtl8192cu-firmware
- kmod-rtlwifi-usb
コンソールで初期設定
uci set network.lan.ipaddr='192.168.90.1'
uci set network.lan.ifname='wlan0'
uci set wireless.default_radio0.network='lan'
uci set wireless.default_radio0.encryption='psk2'
uci set wireless.default_radio0.ssid='hoge'
uci set wireless.default_radio0.key='hogehoge'
uci set wireless.radio0.country='JP'
uci set wireless.radio0.disabled='0'
uci commit
無線LANで接続し、Luci上で設定変更
- Wireless から radio1 を自宅APに接続
- Software からパッケージを追加インストール
- luci-i18n-base-ja
- kmod-usb-net-rndis
- usb-modeswitch
- luci-i18n-wireguard-ja
kmod-rtl8812au-ct
WireGuardのクライアントにする
- ピアの設定でRoute Allowed IPs(許可されたIPのルート)にチェックを入れる
WireGuard接続時のDNSサーバ(dnsmasq)
-
/tmp/resolv.conf.d/resolv.conf.auto
にWireGuardで設定したDNSサーバアドレスが入るが、使われていない?- トンネルの先のDNSサーバを使ってLAN内ホストの名前解決をしたい
- システムログに possible DNS-rebind attack detected とか出ている
- 電算機孝行: Netgear WG302 の OpenWrt で Dnsmasq の possible DNS-rebind attack detected 警告
- 問題解説: 研究の国 第一のトラブル | ICTSC Tech Blog
- DNSの応答がプライベートアドレスなのでブロックされている
- DHCPおよびDNS
- 一般設定
- ドメインホワイトリスト にLANのドメインを追加
- 一般設定