Debian 10(buster)でUSBテザリングを用いたルーター構築

追記

以前、9.5(stretch)用に書いていたものを、10.1(buster)用に一部記述を更新しました。

USBテザリングのネットワーク共有とその経緯

色々と事情(具体的に書くと、以前にインストールしたUbuntuの調子が悪く、少しいじって再起動するとルーターとして機能しなくなったので)があり、Debianを新規にインストールすることになりました。Ubuntuはデフォルト色々ごちゃごちゃインストールしてくれるため、updateをさぼったりすると不具合が生じますね。というわけで、Debianで最低限のシンプルインストールで行きます。これならCUIからのupdateも簡単にできますし(もちろんUbuntuでも色々やればできるとは思いますが…)。

やりたいことは、スマートフォンをUSB接続によるテザリングにてネットワークに接続し、その接続を複数台のPCで共有することです。手元では格安simの速度制限モードでの運用をしておりますので、速度はほとんど出ませんが、テキストメインのウェブ閲覧には十分です。テザリングはAndroidを使っておりますが、iPhoneでも可能とのことです。

立てるサービスは2つです。まず、ネットワーク共有する複数のPCのために、DHCPサーバーを立てます。テザリングによる接続ではDNSサーバーが動的に与えられますが、それをそのままDHCPで配る術があるのかもしれませんが、簡単に調べた範囲では見付かっておりません。そこで、DNSキャッシュサーバーを立て、自分自身のIPをDNSサーバーとして渡すことで解決しました。あとは、パケットのforwarding機能を有効にすれば、完成です。

インストールメディアの準備

昔はDVD-Rなどに焼いておりましたが、最近ではUSBフラッシュドライブ(以下USBディスク)からの起動が可能なマザーボードも多くなり、USBディスクを起動ディスクにしております。そのためには、インストール用のISOイメージと、ISOイメージをUSBディスクに書き込むためのソフトウェアが必要です。私はRufusを使っております。ダウンロードしたISOファイルを指定して、書き込むだけで完了すると思います。

インストール設定

今回は64GBの空いていたSSDを使いましたので、適当に「/」に8GB、「/usr」に8GB、「/var」に8GB、「/tmp」に8GB、「/home」に残り32GBとしました。標準ユーティリティとSSHサーバーのみを入れました。Xだのごちゃごちゃと入れなければ、64GBでも相当に余るくらいです。インストール直後にdfをしてみると「/」5%、「/usr」7%、「/var」4%、「/tmp」1%、「/home」1%しか使用しておりませんでした。16GBのSSDでも今回の用途であれば十分過ぎるくらいですね。

パーティションの設定以外、特にいじった記憶はありません。以下の作業は、適宜sudo等適切な権限で行ってください。

ネットワークへの接続

USBでのテザリングでの接続のため、最初に色々とやる作業があります。最初に接続されているネットワークインターフェースを確認します。

ip address

まずはスマートフォンをUSB接続で繋いで、スマートフォン側のテザリングの設定を有効にします。その状態でもう一度ネットワークインターフェースを確認します。増えているものがテザリングでの接続です。手元では「enp0s29f7u4」でしたので、これを使います。

繋いだだけでは繋らないので、dhcpクライアントを実行しなければなりません。いつの間にかdhcpcdは見付からず、代わりにdhclientがインストールされておりますので

dhclient enp0s29f7u4

を実行して、しばらくすると外部と繋るようになります。pingなどで確認してください。

aptの最低限の設定

ミラーサイトの設定を行います。Debian JPのサイトに従いまして、「/etc/apt/sources.list」に

deb http://ftp.jp.debian.org/debian/ buster main contrib non-free
deb http://ftp.jp.debian.org/debian buster-updates main contrib

を設定させていただきます。そのあと、

apt update

あたりでデータベースをupdateして、適当に必要なソフトを放り込みます。私などは上の作業は辛うじて使えるviを使っておりますが、あまり自由に使えないのでemacs-noxを入れたり、apt-get/cacheの代用のaptitude、それからnicのfirmware-realtek、net-toolsなども入れました。

USBディスクのマウントとaptレポジトリとして利用

何かファイルのやりとりの際に便利なUSBディスクのマウントも覚書として残しておきます。

ls /dev/sd*

で表示させてみて、起動用の他に見付かるものを探します。手元だとsdbとsdb1が見付かります。なので、sdb1をマウントしてみます。適当に/media以下にusb0というディレクトリを作って

mount -t vfat /dev/sdb1 /media/usb0

を実行すると「/media/usb0以下」にいろいろと見えるようになります。今回は特に使いませんでしたが、何かと必要になる可能性があるのでメモしておきました。インストール時に使ったUSBをマウントし、これを「/etc/fstab」あたりに書いておきますと、

apt-cdrom add -d path

でマウントされば場所(/media/usb0)を上のpathに指定すると、aptのレポジトリとして加えられるようです。試しておりませんが、ネットワークに最初繋らず、NICのドライバをbuildするためにローカルからパッケージを入れたい場合などに重宝すると思います。「/etc/fstab」に書く内容としては

/dev/sdb1    /media/usb0    vfat    rw,isocharset=utf8,codepage=932,user,noauto,flush,noatime    0    0

くらいでしょうか。

ネットワークの設定

NICをip addressコマンドで確認すると、enp6s0になっているので設定を「/etc/network/interfaces」に書いておきます。enp6s0側にPCを接続してDHCPでIPを配り、またenp0s29f7u4側からインターネットに接続することになります。また最近ではnet-toolsがデフォルトでインストールされないため「ifconfig」が使えずに少々焦りましたので、必要に応じて「apt install net-tools」をやっておくといいかもしれません。

auto enp6s0
iface enp6s0 inet static
    address 192.168.0.1
    netmask 255.255.255.0
auto enp0s29f7u4
iface enp0s29f7u4 inet dhcp

DNSサーバーの設定

最近、インストール後に「/etc/resolv.conf」がないことが多くなりました。ない場合、DNSの解決ができませんので、その場合は自分で作れば解決することが多いです。適当に、

nameserver 192.168.0.1

あたりで作っておくと上手く行きました。

DHCPサーバー、DNSキャッシュサーバーのインストール

isc-dhcp-serverやbindを組み合わせる程に仰々しいことをやりたいわけではないので、簡単に設定ができるdnsmasqを使いました。

aptitude install dnsmasq

でインストールをします。一度

systemctl stop dnsmasq

で止めてから、設定を変えます。「/etc/dnsmasq.conf」の

port=53
interface=enp6s0
dhcp-range=192.168.0.10,192.168.0.20,12h

などの設定のコメントを外し、適切な値を設定します。portを指定することでDNSキャッシュサーバーを動かし、DNSとDHCPのインターフェースを限定をかけ、DHCPで配るIPを指定します。Debianも8.0系列からsystemdが標準になり、最初はとまどいながら設定しました。

参考にさせていただいたサイト

設定の後は

systemctl start dnsmasq
systemctl enable dnsmasq

とやってエラーなく動くことを確認し、自動的に起動するように設定します。以下で簡単にsystemctlをまとめておきます。UNITは各サービスユニット名に置き換えてください。

  • サービス一覧 systemctl list-unit-files -t service
  • サービス起動 systemctl start UNIT
  • サービス停止 systemctl stop UNIT
  • サービス再起動 systemctl restart UNIT
  • サービスリロード systemctl reload UNIT
  • サービスステータス表示 systemctl status UNIT
  • サービス自動起動有効 systemctl enable UNIT
  • サービス自動起動無効 systemctl disable UNIT
  • サービス自動起動設定確認 systemctl is-enabled UNIT

フォワーディングの設定

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

net.ipv4.ip_forward=1

上記設定の反映は

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

で確認しておきます。

iptablesの設定

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

iptables -t  nat -A POSTROUTING -o enp0s29f7u4 -j MASQUERADE
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

としておきました。

aptでの自動アップデートの設定

「/etc/cron.daily」あたりに、実行属性を付けたファイルに

apt update
apt upgrade -y

くらいを書いておいておいたんだけど、何故か実行されておりません。調べてみると、どうもanacronが入っていないことが原因っぽい。確かに「/etc/crontab」を確認してみると、anacronを使っていますね。というわけで、

sudo apt install anacron
sudo systemctl enable anacron.service
sudo systemctl start anacron.service

くらいを実行しておきました。参考にさせていただいたサイト

コメント

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