Skip to content

Instantly share code, notes, and snippets.

@tsutsui
Last active July 20, 2023 18:18
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save tsutsui/bd52b05657da2563f7ca89d90f5f0c7f to your computer and use it in GitHub Desktop.
Save tsutsui/bd52b05657da2563f7ca89d90f5f0c7f to your computer and use it in GitHub Desktop.

Android の USBテザリング WAN接続をつないだ NetBSD/amd64 9.3 の Let's Note CF-NX3 をルータにして謎マシンの有線LANでデモする設定メモ

環境

  • ルーターとして設定する本体: Let's Note CF-NX3
    • 内蔵LAN wm(4) Intel I218 Gigabit Ethernet: これをLAN側とする
    • 内蔵無線LAN iwm(4) : 今回は未使用; ちゃんと設定すればこちらを WAN側にもできるはず
    • USB 2.0 ehci(4) に Android端末を接続する
  • テザリングで WAN側につなぐ Android端末: HUAWEI MediaPad M3 Lite LTE
    • ここでは Android 7.0 ですが、よほど古くなければ大丈夫なはず?
    • NetBSD で urndis(4) でアクセス可能な USBテザリングI/F: これがWAN側となる

既存のネットワーク設定無効化

/etc/rc.conf で以下の設定がされていたら無効にしておく

  • ifconfig_[I/F名] によるネットワーク設定
  • dhcpd=YES の起動設定
  • dhcpcd=YES の起動設定
  • npf=YES の起動設定

LAN側IPアドレス設定

LAN側の wm(4)wm0 で DHCPサーバーを動かすので固定IPを割り当てる。 ここでは IPアドレスを 192.168.20.101 とし、ホスト名は cf-nx3 とする。

/etc/hosts に以下を追加する。

192.168.20.101	cf-nx3

ifconfig(8) コマンドで LAN側IPアドレスを設定する。

# ifconfig wm0 192.168.20.101

npf(7) による NAT設定のための npf.conf(5) の準備

/usr/share/examples/npf/soho_gw-npf.conf のサンプル設定ファイルを /etc/npf.conf にコピーする。

# cp /usr/share/examples/npf/soho_gw-npf.conf /etc/npf.conf
# chmod u+w /etc/npf.conf

サンプルからコピーした /etc/npf.conf を編集して以下のように修正する。

$ext_if = "wm0"
$ext_v4 = inet4(wm0)
$ext_addrs = ifaddrs(wm0)

の WAN側 I/F名として書かれている wm0 を今回 WAN側にする urndis0 に書き換える。

$int_if = "wm1"

の LAN側 I/F名として書かれている wm1 を今回 LAN側にする wm0 に書き換える。

$localnet = { 198.51.100.0/24 }

の LAN側のサブネットを今回 LAN側に割り当てるIPアドレスに合わせて以下のように書き換える。

$localnet = { 192.168.20.0/24 }

外部からの SSHログインのためのポート転送設定はたちまちは不要なのでコメントアウトする。

# map $ext_if dynamic 198.51.100.2 port 22 <- $ext_v4 port 9022

ポート転送のための sysctl(8) 設定

root で以下を実行して複数のネットワークI/F間の転送を有効にする。

# sysctl -w net.inet.ip.forwarding=1

Android端末での USBテザリング接続

Android端末をUSB接続し、Android端末側の設定で USBテザリングを有効にする。 NetBSD側で urndis0 として認識されたら root で dhcpcd(8) を実行して IPアドレス、DNSサーバーアドレス等を取得する。

# dhcpcd urndis0

ifconfig(8) コマンドを使って DHCPで取得されたIPアドレスを確認してメモする。

# ifconfig urndis0

/etc/resolv.conf を見て、DHCPで設定された DNSサーバーアドレス(通常はAndroid端末側のIPアドレス)をメモする

# cat /etc/resolv.conf

npf(7) による NATサービス開始

root で以下を実行して npf(7)npf.conf(5) による NAT動作を開始させる。

# /etc/rc.d/npf onestart

dhcpd(8) による DHCPサーバー設定の dhcpd.conf(5) の準備

dhcpd.conf(5) には事前にメモした DHCPで取得した urndis0 側の IPアドレスと DNSサーバーアドレスを記載する必要がある。

/etc/dhcpd.conf として以下を記載する。

ddns-update-style none;

default-lease-time 600;
max-lease-time 28000;

# 以下の subnet と netmask にはLAN側のサブネットとネットマスクを記載する
subnet 192.168.20.0 netmask 255.255.255.0 {
  # 以下の range にはLAN側のサブネットに合わせてクライアントアドレス範囲を指定する
  range 192.168.20.200 192.168.20.210;
  # 以下の option routers にはメモした WAN側 urndis0 の IPアドレスを記載する
  option routers 192.168.xx.xx;
  # 以下の option domain-name-servers にはメモした DNSサーバーのアドレスを記載する
  option domain-name-servers 192.168.yy.yy;
}

LAN側 DHCPサーバーの実行

LAN側I/Fに対して dhcpd(8) をスタートさせる。

# dhcpd wm0

LAN側クライアントで DHCP client を実行

NetBSD 9.x や 10.0_BETA であれば dhcpcd(8) を実行する

# dhcpcd

USBテザリングが切断されて再接続した場合

たいていの USBテザリングでは、再接続するとAndroid端末側からDHCPで割り当てられるIPアドレスが変化する。 その場合 WAN側 urndis0 の IPアドレスが変わってしまうことになるため、 npf(7) の NAT設定も再設定する必要がある。

# /etc/rc.d/npf onestop
# /etc/rc.d/npf onestart
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment