前回の記事で半分失敗におわった本件…
別の手段でもってリベンジを行いました。
結果的にはうまくいき、恒久的に運用していきます。
(無料期間の間だけな)←
あらすじと手法
自宅の固定回線を楽天UN-LIMITに切り替えて無料化を目論む。
最初に取った手段は、「Raspberry Pi2+USBドングル(with楽天sim)」
しかし、USBドングルの発熱が想定以上に多く、
10数Mbps/sを出し続けると5分程でドングルが機能停止する事態に。
次なる手として、iPhone6s Plus(with楽天MNO)をUSBテザリング手法をとった。
USBドングルだったら見た目すっきり?したのになー。
なお、iPhone6s plusで楽天MNOに接続するには脱獄作業が必要です。
LTE通信を強制させないとつながらない為です。
iPhoneで楽天MNOに接続するにはこちらの記事。
ハマったポイント(概要)
先にハマったポイントを記載。
全部で数時間(かかったんかい)で解決できたからアレですけど…。
- /etc/network/interfacesに関する古い情報が散乱してる
- eth0(LANポート)がstatic IP取得してくれない
(dhcpcd.serviceがちゃんと動いてくれない) - iptablesが設定情報を保存してくれない
- ufwを採用したけど、NAT設定が反映されない
/etc/network/interfacesに関する古い情報が散乱してる
Linuxのネットワーク設定に関わる interfacesファイルの設計思想が変わり、ほとんど変更しなくなりました。
しかし、Googleで出てくる記事が古く、interfacesファイルを直接編集するようなものばかり。
自身の無知が原因ですが、ずいぶんと騙されました…。
結局、ハマりポイント2の原因になったし。
eth0(LANポート)がstatic IP取得してくれない
ラズパイにあるLANポートは、eth0が割り当てられており今回の構成では、static IPを設定して家庭内LANに接続し、ゲートウェイの役割を持たせます。
簡単な話なんですが、設定を入れてもeth0が想定通り動いてくれない事象が発生しました。設定をinterfacesファイルに書いてたのが原因できれいさっぱり、/etc/dhcpcd.confに記載することで問題解決に至りました。
iptablesが設定情報を保存してくれない
今回の構成では、ブリッジの役割があるのでNAT設定が必要です。
iptablesに設定を入れますが、再起動で綺麗さっぱりなくなる。
iptables-saveしても、消えちゃうので、「えぇ!?」ってなりました。
その辺は常識みたいで、iptables-persistantを導入で固定化できる模様です。
前に触ったときは、そんなことなかったんだけどな…
しかーし!ufwというiptablesのラッパーが存在するらしく
そちらの方が面白そうだったので、ufwで固定化を実現しました。
ufwを採用したけど、NAT設定が反映されない
初めて触ることになったufw…。
NAT設定を入れて再起動するも、反映してくれません。
情報が少なく、英語まで読み進めたところ、confに記載するCOMMITはフィルター毎に必要ということが判明。
COMMITの1文追加したら、普通に動いてくれました。
やったこと
では、やったことに入りたいと思います。
- 必要モジュールのインストール
- USBテザリング/LANポートのネットワーク設定
(/etc/dhcpcd.confの編集) - ip_forwardの有効化
- UFWへのNAT設定の追加
- USB接続時の自動接続設定(udev)
必要モジュールのインストールをします。
ずっとapt-get使ってたんですが、最近は時代遅れみたいですね…。
$ sudo apt-get install ipheth-utils libimobiledevice-utils ifuse usbmuxd
$ sudo mkdir /media/iphone
$ sudo ifuse /media/iphone
これでUSB接続したiPhoneを繋げるとテザリングできるようになります。
ifconfigコマンドで確認するとeth1が増えていることがわかると思います。
usbXが増える場合もあるみたいですね。
続いて、自宅LANに接続してルーターとして動作させる為に
ネットワーク周りに設定をいれていきます。
eth0は静的IP、eth1はDHCPでIP取得します。
基本的に /etc/network/interfaces には触らず、dhcpcd.confをいじります。
interfacesファイルに設定を入れてしまうと dhcpcd.service が動かなくなります。
$ sudo vi /etc/dhcpcd.conf
# 設定対象のインタフェースを指定
interface eth0
# 静的IPの指定 IPアドレスは何でも
static ip_address=192.168.100.1/24
# IPv6なんて意識高いのはLANで使わないので…
noipv6
# 問い合わせ先のルーター(GW)を指定
static routers=192.168.100.254
# DNSの設定
#static domain_name_servers=hogefuga
interface eth1
dhcp
NICの設定が完了したら、次は受信パケットを転送する許可をします。
デフォルトだとこの動作が無効化されていますので。
コメントアウト文があるので、#を削除すればそのまま使えます。
$ sudo vi /etc/sysctl.conf
# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1 ←この行の#を削除
で、続いてiptablesにNATの設定を入れますが
今回は、ラッパーアプリである「ufw」の設定をして
ufwからiptablesに設定を反映してもらいます。
SSHでラズパイを操作してる環境だとSSHの許可設定も必要です。
$ sudo apt-get install ufw
まずは、forwardポリシーが拒否になっているので許可に変更
$ sudo vi /etc/default/ufw
DEFAULT_FORWARD_POLICY=“ACCEPT”
$ sudo vi /etc/ufw/before.rules
# NAT
*nat
-F ←ネットによると重複登録防止に必要らしいが、うちの環境はエラー
:POSTROUTING ACCEPT [0:0]
# LAN側(192.168.*)からeth1を出てくものはマスカレード設定
-A POSTROUTING -s 192.168.0.0/16 -o eth1 -j MASQUERADE
COMMIT
最後にufwを有効化します。
設定がまずいとenable時になんか言われると思います。
statusがアクティブになっていればOKです。
$ sudo ufw enable
$ sudo ufw status
この時点で、LANがラズパイルーターを通過して
インターネットの世界に出れているか確認ができます。
最後に、ラズパイを再起動したり、iPhoneの抜き差しをしても
自動でつながるようにする設定を入れておきます。
先にudevで実行するshell scriptを用意します。
$ sudo vi /lib/udev/iphoneconnect
$ sudo chmod 755 /lib/udev/iphoneconnect
#!/bin/bash
umount /media/iPhone #アンマウントされない用
ifuse /media/iPhone
ipheth_pair
続いてudevの設定をします。
$ sudo vi /lib/udev/rules.d/90-iphone-tether.rules
ACTION==”add”, SUBSYSTEM==”net”, ENV{ID_USB_DRIVER}==”ipheth”, SYMLINK+=”iphone”, RUN+=”iphoneconnect”
再起動して自動接続を確認したら完了です。
総括
USBドングルのような発熱問題もなく安定しています。
本来、数万円する端末なので当然といえば当然ですが…。
ライトニングケーブル接続なので、iPhoneの充電切れもありません。
これで、1年ほどはネット回線費用が0円になりました。
やったー。
コメント