Ubuntu 16.04 LTSでAndroidのUSBテザリングによるモバイルルータ構築

(追記)当時Ubuntuでないと上手く行かないことがありましたが、多少古い情報などもあり、最新のDebianでの構築情報の方がこちらよりはまともです。

ネットで検索すると断片的な情報は手に入るのですが、まとまっているものがなかなかなかったので書き残しておきます。必要になってネットで調べるような運用をしているため、正式な方法でないものもあるかと思いますが、もしコメントいただければ時間の許す限り反映いたします。やりたいことは、AndroidのUSBテザリングによるインターネット接続を他のPCでも接続できるようにすることです。Android 6.0と7.0での接続は確認しましたが、スマホ関連の設定については省略します(ケーブルで繋いでテザリングの設定にてUSBテザリングを有効にするだけのはずなので)。またubuntuのインストールもここでは省略します。

ネットワークインターフェースの名前変更

まず最初に困ったのが、ifconfigの出力にeth0がない!どうやらUbuntu 16.04のネットワークインターフェースの名前が変更されていたようです。そのままでもいいと思いますが、慣れたeth0、それから分かりやすくusb0にしようと思って「/etc/udev/rules.d」以下のような内容のファイルを「99-nic-name.rules」として作ってみました。

SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="MACアドレス", NAME="usb0"
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="MACアドレス2", NAME="eth0"

参考サイト

これでUSBテザリングによるインターフェースの方は名前が変更(usb0に設定)できたのですが、Ethernet(eth0など)の方は何故か変更が上手く行かず「enpXXX」のまま。まぁいいか、と放置。

ローカル側のDHCPサーバー設定

isc-dhcp-serverのインストール

sudo apt-get install isc-dhcp-server

次にネットワーク設定を「/etc/network/interfaces」を変更

auto enpXXX
iface enpXXX inet static
      address 192.168.0.1
      netmask 255.255.255.0

インターフェースをenpXXXに設定「/etc/default/isc-dhcp-server」

INTERFACES="enpXXX"

DHCPサーバーの設定を「/etc/dhcp/dhcpd.conf」に記述

subnet 192.168.0.0 netmask 255.255.255.0 {
    range 192.168.0.10 192.168.0.99;
    option domain-name-servers 192.168.0.1;
    option domain-name "hogehoge.local";
    option broadcast-address 192.168.0.255;
    option routers 192.168.0.1;
    default-lease-time 600;
    max-lease-time 7200;
}

以下で設定の反映を行います。

sudo systemctl restart networking
sudo systemctl enable isc-dhcp-server
sudo systemctl restart isc-dhcp-server

フォワーディング設定

フォワーディングの設定を「/etc/sysctl.conf」に記述(コメントを外す)

net.ipv4.ip_forward=1

上記設定の反映は

sudo sysctl -p
cat /proc/sys/net/ipv4/ip_forward

で確認しておく。

iptablesの設定

本来であればwrapperのufwを使うのが簡単なのかもしれないけど、iptablesの方に慣れているので。また色々としたfirewallとしての設定は省略しております。

sudo iptables -t  nat -A POSTROUTING -o usb0 -j MASQUERADE
sudo iptables-save > /etc/iptables.rules

起動時に読み込む設定を「/etc/network/if-pre-up.d/iptables」として

#!/bin/sh
/sbin/iptables-restore < /etc/iptables.rules

の内容で作成し

chmod 755 /etc/network/if-pre-up.d/iptables

としておく。

DNSのキャッシュサーバを立てる

sudo apt-get install dnsmasq

ただ、どうやらNetworkManagerと併用の場合は「/etc/NetworkManager/NetworkManager.conf」内の「dns=dnsmasq」をコメントアウトする必要があるようです。

sudo systemctl enable dnsmasq
sudo service dnsmasq start

一応実行しておきます。これだけでキャッシュとしては動きます。こちらをDHCPサーバとしても動かす方法もあるのですが、気が向いたら更新します。

元々はDebianで色々と管理をしており、ubuntuではそもそもシステム管理のやり方が少々違って苦労しました(2018年8月加筆: DebianとUbuntuの違いというよりも、SysVinitからsystemdへの移行ですね)。

systemctl -t service # サービスの起動設定一覧表示
systemctl list-unit-files -t service # サービスの起動設定の一覧表示
ip address #"address"は短縮可
ip address show dev eth0 #NIC指定表示
ifconfig #起動中のNICを表示
ifconfig -a #DOWN中のNICも表示

コメント

タイトルとURLをコピーしました