(追記)当時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も表示
コメント