印刷用表示へ切り替え 通常表示へ切り替え 更新履歴を表示 更新履歴を隠す
Linux 自宅サーバを Android 経由でインターネットにつなぐ

自宅サーバを Android タブレットの docomo SIM 経由でインターネットに接続する。インターネット側からの自宅サーバへの接続は docomo がグローバル IP アドレスを割り当ててくれないため不可能。

■ ■ ■

現在,自宅のインターネット環境は,ADSL 回線のタイミングがドンピシャといかなかったため (NTT 局内の回線撤去と開通が同日で行われないため),不通となっている。そこで,今しかできない接続方法を試すことにした。それは,自宅サーバを Android タブレットの SIM 経由でインターネットに接続するというものである。

実際に行ってみたところ,自宅からインターネットへの接続は可能だったが,インターネット側から自宅サーバへの接続は docomo がグローバル IP アドレスを SIM に割り当てていないため不可能だった。

動作環境

Android タブレットは ASUS Fonepad ME371-GY08 で,これに BB.excite の格安 SIM を刺している (nlog(n): BB.excite SIM を購入したんだが)。

  • Linux: Vine Linux 6.2, dhclient 4.1-ESV-R6, iptables 1.4.10
  • Android tablet: Android 4.1.2, Port Forwarder 6.1
  • SIM: BB.excite モバイル LTE (docomo SIM)

ネットワーク図


Linux サーバを USB ケーブルで Android タブレットに接続し,タブレットに入っている docomo SIM でインターネットに接続する。

各 IP アドレスは以下のようにして調べることができる。

  • 最終的なインターネットへの出口: Dyn.com の Current IP Check
  • Android の WAN 側 (rmnet0): Port Forwarder アプリ
  • Android の LAN 側: dhclient コマンド
  • Linux の USB インターフェース (usb0): ifconfig コマンド,dhclient コマンド
  • Linux の有線 LAN インターフェース (eth0): ifconfig コマンド
  • ブロードバンドルータの WAN 側, LAN 側: ブロードバンドルータの Web インターフェース

設定方法

Linux サーバで Android の SIM 経由でインターネット接続する

Linux サーバでインターネット接続するには,まず Android タブレットを USB 接続して,Android の設定でインターネット共有をオンにする。すると,Linux ではネットワークデバイスとして自動認識してくれる。

$ ifconfig -a

デバイスが認識されていることが分かる。ここで表示されるデバイス名が usb0 だとすると,このインターフェースに IP アドレスを DHCP で割り当てる必要がある。DHCP サーバは Android タブレットである。dhclient コマンドが使える (Linuxとネットワークの接続をUSBテザリングで行う | sunaba [beta])。

# dhclient -v usb0
Internet Systems Consortium DHCP Client 4.1-ESV-R6
Copyright 2004-2012 Internet Systems Consortium.
All rights reserved.
For info, please visit https://www.isc.org/software/dhcp/

Listening on LPF/usb0/ae:4d:42:0b:4e:0f
Sending on   LPF/usb0/ae:4d:42:0b:4e:0f
Sending on   Socket/fallback
DHCPDISCOVER on usb0 to 255.255.255.255 port 67 interval 4
DHCPREQUEST on usb0 to 255.255.255.255 port 67
DHCPOFFER from 192.168.42.129
DHCPACK from 192.168.42.129
bound to 192.168.42.162 -- renewal in 1674 seconds.

Linux の USB インターフェースに 192.168.42.162 が割り当てられたことが分かる。MAC アドレスも表示されているがご愛嬌ということで。google.co.jp や yahoo.co.jp などに ping して応答があれば完了である。

Linux サーバを NAPT ルータにする

Linux サーバ自身でインターネットにアクセスできるようになったら,次は配下にある PC もアクセスできるようにしたい。そこで Linux サーバに NAPT ルータの機能を持たせることにする (ネットワークアドレス変換 - Wikipedia)。WAN 側デバイスが usb0,LAN 側のデバイスは有線の eth0 とする。まず,Android タブレットの IP アドレスを確認しておく。上述の dhclient コマンドの出力で, DHCPACK from 192.168.42.129 となっていたらこれが Android の IP アドレスである。

まずはルーティングテーブルの設定である。普段は 192.168.0.1 をデフォルト・ゲートウェイとしているので,これを外してから Android に設定し直す。

# route del -net 0.0.0.0 gw 192.168.0.1 netmask 0.0.0.0
# route add -net 0.0.0.0 gw 192.168.42.129 netmask 0.0.0.0

次に,異なるネットワークインターフェース間での通信をできるようにする。/etc/sysconfig/network に FORWARD_IPV4=yes 以下の行を追加する。

NETWORKING=yes
HOSTNAME=localhost.localdomain
FORWARD_IPV4=yes
GATEWAYDEV=usb0
GATEWAY=192.168.42.129

設定を有効にするために,ネットワークのスクリプトを再起動する。

# /etc/init.d/network restart

この設定が有効化されているかどうかは,/proc 内の値で確認することができる。

# cat /proc/sys/net/ipv4/ip_forward
1

1 なら有効,0 なら無効である。もし有効になっていない場合は,上の /etc/sysconfig/network と設定が重複するが,/etc/sysctl.conf を編集し,net.ipv4.ip_forward = 1 に設定する。

# Controls IP packet forwarding
net.ipv4.ip_forward = 1

設定を再読み込みして有効にする。

# /etc/init.d/sysctrl reload

NAPT の Linux 実装は IP マスカレードなのでこれを指定する (linuxマシンのルータ化 その3 iptablesの設定(IPマスカレード) - ひよっこエンジニアの日記)。

# iptables -t nat -A POSTROUTING -o usb0 -j MASQUERADE

間に入っているブロードバンドルータを設定する

Linux の有線側ネットワークにブロードバンドルータが接続されているので,ブロードバンドルータのデフォルト・ゲートウェイ設定も変更する必要がある (192.168.0.1 → 192.168.42.129)。

PC からインターネットに接続できれば完了である。

外部からサーバへのアクセス設定

今度は逆にインターネット側から SIM を経由して自宅 Linux サーバにアクセスさせるための設定を試す。利用するのは Android アプリの Port Forwarder である。

Port Forwarder アプリを使うと,外部から内部へのポートマッピングが可能になる。Android で root をとっていないと 0〜1023 のポート番号を割り当てることができないが,root でなくてもそれより大きなポート番号であれば割り当て可能なので,試すのであれば十分である。Port Fowarder アプリの設定インターフェースは簡潔で分かりやすい。インターネット側のデバイスの選択とターゲット IP アドレス (内側の IP アドレス),マッピングするポート番号を設定すればよい (ポート転送ソフト「PortForwarder」について)。

デバイスとして rmnet0 を選択すると,100.76.71.44 となった。100.64.*.*/10 はシェアード IP アドレススペースと呼ばれるアドレスレンジで,サービスプロバイダ内で使用されるプライベート IP アドレスである (Geekなぺーじ:CGN用途のISP Shared Address - 100.64.0.0/10)。サブネットマスクは 10 なので,レンジとしては 100.64.0.0 〜 100.79.255.255 となる。

インターネット側から自宅 Linux サーバへのアクセスはできるのか? 結論は「できない」。これは,docomo がグローバル IP アドレスを割り当ててくれていないからである。

この設定の利点と欠点

この設定をすることにより,遅いながらも自宅ネットワークからインターネットに接続することができるようになる。欠点としては Linux サーバ上で設定変更をいろいろしてしまうので,もとの ADSL 環境に戻したときにすぐに接続ができないことである (設定を戻さなければならない)。

Posted by n at 2015-11-03 20:31 | Edit | Comments (0) | Trackback(0)
Trackbacks

  • 「手違いで複数トラックバックを送ってしまった!」という場合でも気にしないでください (重複分はこちらで勝手に削除させていただきます)
  • タイムアウトエラーは,こちらのサーバの処理能力不足が原因です (詳細は トラックバック送信時のエラー をご覧ください)
  • トラックバックする記事には,この記事へのリンクを含めてください(詳細は 迷惑トラックバック対策 をご覧ください)
Comments
Post a comment
  • 電子メールアドレスは必須ですが,表示されません (気になる場合は「メールアドレスのような」文字列でもOKです)
  • URL を入力した場合はリンクが張られます
  • コメント欄内ではタグは使えません
  • コメント欄内に URL を記入した場合は自動的にリンクに変換されます
  • コメント欄内の改行はそのまま改行となります
  • 「Confirmation Code」に表示されている数字を入力してください (迷惑コメント対策です)


(必須, 表示されます)


(必須, 表示されません)


(任意, リンクされます)


Confirmation Code (必須)


Remember info (R)?