7
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

ラズパイを無線LANイーサネットコンバータ化する方法

Last updated at Posted at 2018-12-30

#無線LANイーサネットコンバータとは
有線LAN接続しか持っていない機器をブロードバンドルータまで無線で接続できるようにする機器です。
私の家のテレビがインターネットへの接続はできるのですが、有線LANしか持っていないのでラズパイにつないでブロードバンドルータまでwifiで中継してくれています。
ラズパイにIPマスカレードの設定とDHCPサーバを構築することで実現できます。
今回、DHCPサーバは、 docker + kea-dhcp4 で構築したいと思います。

#環境

  • Raspberry Pi 3 Model B
  • OSバージョン
$ uname -a
Linux raspberrypi 4.14.79-v7  #1159 SMP Sun Nov 4 17:50:20 GMT 2018 armv7l GNU/Linux
$ grep -H "" /etc/*version ; grep -H "" /etc/*release
/etc/debian_version:9.6
/etc/os-release:PRETTY_NAME="Raspbian GNU/Linux 9 (stretch)"
/etc/os-release:NAME="Raspbian GNU/Linux"
/etc/os-release:VERSION_ID="9"
/etc/os-release:VERSION="9 (stretch)"
/etc/os-release:ID=raspbian
/etc/os-release:ID_LIKE=debian
/etc/os-release:HOME_URL="http://www.raspbian.org/"
/etc/os-release:SUPPORT_URL="http://www.raspbian.org/RaspbianForums"
/etc/os-release:BUG_REPORT_URL="http://www.raspbian.org/RaspbianBugs"

#有線LANの固定IPアドレス設定
まずは、eth0に固定IPを割り当てる必要があります。
デフォルトだと下記の状態になっています。

$ ip address show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
   link/ether b8:27:eb:xx:xx:xx brd ff:ff:ff:ff:ff:ff
   inet 169.254.19.208/16 brd 169.254.255.255 scope global eth0
      valid_lft forever preferred_lft forever
   inet6 fe80::f14b:4ed3:336a:eae6/64 scope link
      valid_lft forever preferred_lft forever

eth0に固定IPを割り当てる為に /etc/dhcpcd.conf を編集します。

/etc/dhcpcd.conf
〜省略〜
# Example static IP configuration:
interface eth0 # コメントアウトされているのを外す
static ip_address=192.168.100.1/24 # コメントアウトを外して割り当てたいIPアドレスを指定する
#static ip6_address=fd51:42f8:caae:d92e::ff/64
#static routers=192.168.0.1
#static domain_name_servers=192.168.0.1 8.8.8.8 fd51:42f8:caae:d92e::1
〜省略〜

設定を反映させます。

$ sudo systemctl restart dhcpcd.service
$ ip address show eth0
2: eth0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc pfifo_fast state UP group default qlen 1000
   link/ether b8:27:eb:xx:xx:xx brd ff:ff:ff:ff:ff:ff
   inet 192.168.100.1/24 brd 192.168.100.255 scope global eth0
      valid_lft forever preferred_lft forever
   inet6 fe80::f14b:4ed3:336a:eae6/64 scope link
      valid_lft forever preferred_lft forever

#Dockerのインストール
続いてDockerのインストールを行います。
下記のコマンドを実行するだけでインストールできます。

$ curl -sSL https://get.docker.com | sh

ログインで使用しているユーザでもdockerが使用できるようにdockerグループに追加します。

$ sudo usermod -aG docker (ユーザ名)

dockerのバージョン確認

$ docker version
docker version
Client:
 Version:           18.09.0
 API version:       1.39
 Go version:        go1.10.4
 Git commit:        4d60db4
 Built:             Wed Nov  7 00:57:21 2018
 OS/Arch:           linux/arm
 Experimental:      false

Server: Docker Engine - Community
 Engine:
  Version:          18.09.0
  API version:      1.39 (minimum version 1.12)
  Go version:       go1.10.4
  Git commit:       4d60db4
  Built:            Wed Nov  7 00:17:57 2018
  OS/Arch:          linux/arm
  Experimental:     false

#kea-dhcp4サーバの構築
docker作業ディレクトリにDockerfileとetc/kea/kea-dhcp4.confを作成します。

Dockerfile
FROM ubuntu:latest
EXPOSE 67:67/udp
ARG DEBIAN_FRONTEND=noninteractive
RUN apt update && apt install -y \
    kea-dhcp4-server \
    tzdata \
    && ln -s -f /usr/share/zoneinfo/Asia/Tokyo /etc/localtime \
    && echo "Asia/Tokyo" > /etc/timezone \
    && dpkg-reconfigure -f noninteractive tzdata \
    && sed -i -e "s/\/etc\/kea\-dhcp4\-server\.conf/\/etc\/kea\/kea\-dhcp4.conf/" /etc/init.d/kea-dhcp4-server \
    && rm -rf /var/lib/apt/lists/*
CMD ["kea-dhcp4", "-c", "/etc/kea/kea-dhcp4.conf"]
etc/kea/kea-dhcp4.conf
{

"Dhcp4":
{
  "interfaces-config": {
    "interfaces": [ "eth0" ]
  },
  "lease-database": {
    "type": "memfile"
  },
  "expired-leases-processing": {
    "reclaim-timer-wait-time": 10,
    "flush-reclaimed-timer-wait-time": 25,
    "hold-reclaimed-time": 3600,
    "max-reclaim-leases": 100,
    "max-reclaim-time": 250,
    "unwarned-reclaim-cycles": 5
  },
  "valid-lifetime": 4000,
  "subnet4": [
    {
      "subnet": "192.168.100.0/24", # 割り当てるIPアドレス帯域を指定する
      "pools": [
        {
          "pool": "192.168.100.100 - 192.168.100.200" # 割り当てるIPアドレスの範囲を指定する
        }
      ],
      "option-data": [
        {
          "name": "routers",
          "data": "192.168.100.1" # ラズパイのeth0のIPアドレスを指定する
        },
        {
          "name": "domain-name-servers",
          "data": "xxx.xxx.xxx.xxx" # ラズパイが使用しているドメインネームサーバを指定する
        }
      ]
    }
  ]
},

"Logging":
{
  "loggers": [
    {
      "name": "kea-dhcp4",
      "output_options": [
          {
            "output": "/var/log/kea-dhcp4.log"
          }
      ],
      "severity": "INFO",
      "debuglevel": 0
    },
  ]
}

}

dockerイメージをビルドします。

docker build ./ -t kea-dhcp4-server

kea-dhcp4サーバを起動します。

$ docker run -d --net=host --name=kea-dhcp4-server -v $(pwd)/etc/kea:/etc/kea kea-dhcp4-server
$ docker ps
CONTAINER ID        IMAGE               COMMAND                  CREATED             STATUS              PORTS               NAMES
c5989003b329        kea-dhcp4-server    "kea-dhcp4 -d -c /et…"   4 seconds ago      Up 2 seconds                           kea-dhcp4-server

#IPマスカレード設定
eth0に接続している機器からのパケットはwlan0を通過するように設定します。

$ sudo iptables -A FORWARD -i eth0 -o wlan0 -j ACCEPT
$ sudo iptables -A FORWARD -i wlan0 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
$ sudo iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE

iptables設定を再起動しても反映されるようにする為に iptables-persistent パッケージをインストールします。

$ sudo apt install iptables-persistent

iptables設定を保存する

$ sudo netfilter-persistent save

#動作確認
有線LAN側に接続した機器でインターネットへの接続テストなどを実施すると動作確認ができます。
私の家のテレビでは、下記の4つの確認が行われて正しく接続できていることが確認できました。

接続テスト 接続確認
-----
1. LANケーブルの接続:○ <- ここで失敗している場合は、LANケーブルが正しく接続されていない可能性があります。
2. IPアドレスの設定:○
3. ゲートウェイへの接続:○ <- ここで失敗している場合は、kea-dhcpサーバが起動していないか、IPアドレスやゲートウェイ情報などが受け取れていない可能性が高いのでkea-dhcpサーバ設定の見直しが必要です。
4. インターネットへの接続:○ <- ここで失敗している場合は、IPマスカレードの設定見直しが必要です。
-----
ネットワーク接続の確認が正しく終了しました。
7
14
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
7
14

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?