はじめに
QNAPのDockerコンテナをホストと同じネットワークに追加し、ホストとは別のIPとしてアクセスしたいという欲望を解消する。
条件
- SSHができること
- Dockerが動いていること
- NASのネットワークが死んでも泣かない心
やることは?
MACVLANを使います。
基本的に以下の方が書いてくださったことをそのままコピー。
ただ、QNAPのInterface指定方法による違いを吸収するのと、ルート設定がそのままではうまくいかなかったので修正。
https://qiita.com/pochy9n/items/8c175db18da4a44ae2d2
設定
設定条件
以下のような設定条件で構築します。
ホスト(QNAP自体)
項目 | 内容 |
---|---|
Interface名 | qvs0 |
IPアドレス | 192.168.0.2/24 |
Gateway | 192.168.0.1 |
追加する仮想IF | htoc0 |
htoc0のIP | 192.168.0.5 |
コンテナ
コンテナ1
項目 | 内容 |
---|---|
ホスト名 | container1 |
IPアドレス | 192.168.0.41 |
コンテナ2
項目 | 内容 |
---|---|
ホスト名 | container1 |
IPアドレス | 192.168.0.42 |
docker network
項目 | 内容 |
---|---|
ネットワーク名 | dlocal |
設定手順
1. docker networkを作成
$ sudo docker network create -d macvlan --subnet=192.168.0.0/24 --gateway=192.168.0.1 -o parent=qvs0 dlocal
$ docker network ls
NETWORK ID NAME DRIVER SCOPE
f6557d923fdb bridge bridge local
3a47ec73a64a host host local
af79cdd95e38 none null local
9ba521c1a1a1 dlocal macvlan local
9382478e8ea9 qnet-dhcp-eth0-6d6da6 qnet local
52312798037b qnet-static-eth0-79e6cc qnet local
2. dockerコンテナを起動
$ sudo docker run -d -it --network dlocal --ip 192.168.0.41 --name conte1 ubuntu:latest /bin/bash
$ sudo docker run -d -it --network dlocal --ip 192.168.0.42 --name conte2 ubuntu:latest /bin/bash
$ docker ps -a
CONTAINER ID IMAGE COMMAND CREATED STATUS PORTS NAMES
bc8730bf2a81 ubuntu:latest "/bin/bash" 36 minutes ago Up 36 minutes container1
d6eef7ae8903 ubuntu:latest "/bin/bash" 36 minutes ago Up 36 minutes container2
3. 仮想IFの設定
QNAP自体から dlocal に接続するための仮想IFを設定。
また、dlocal内のIPへの経路情報も設定する
sudo ip link add htoc0 link qvs0 type macvlan mode bridge
sudo ip addr add 192.168.0.5/32 dev htoc0
sudo ip link set htoc0 up
sudo ip route add 192.168.0.41/32 dev htoc0
sudo ip route add 192.168.0.42/32 dev htoc0
元記事では/24で設定してあったが、RTNETLINK answers: File exists
が出てしまうので/32でルートを設定した。
もしコンテナを追加する場合は対象IPへのルートを都度設定すること。
大事なこと
「3. 仮想IFの設定」については、QNAP自体への設定になるがこの設定は永続的なものにはならず、再起動する都度実行する必要があるので注意。
以下のAutrun.shの対応をしておくといいかもしれません。
https://www.qnap.com/ja-jp/how-to/faq/article/running-your-own-application-at-startup