Ubuntu
vlan
Wi-Fi
ubuntu16.04
TRUNK
SFC-RGDay 12

Ubuntuを複数VLAN/SSID吹けるAPにしてみる

この記事はSFC-RG Advent Calendar 2017の12日目です。
自宅に研究室の回線を引いて家で進捗を埋めるようにする準備。


概要

目的

VLAN(802.1qタグ付きパケット)が吹けるAPって高い :money_with_wings:
PoEスイッチが無い場合ACアダプターも一緒に買わないといかん:thumbsdown:
image.png
引用:http://amzn.asia/3eJEdHN
業務用途だと良いんだけどオタク個人用途で使うのにはちょっと気が引ける。

やること

  • Ubuntuにタグ付き
  • 使わないパソコンを複数VLAN/SSIDが吹けるアクセスポイントにして節約する :money_mouth:

構成

環境

  • Ubuntu 16.04.3 LTS (Xenial Xerus)
  • ASUS K53E 未検証だがRaspiのような小さいARM系のPCでも大丈夫。

L2/L3トポロジー図

qiita-20171212.png

設定内容

:zero: 事前準備

  • ルーター/L2SWの設定
    • 使用するVLANとVLANインターフェースを用意しておく。
    • NATする場合はNATの準備
    • WANの準備 PPPoE/tunnel インターフェースなど
    • Ubuntuをつなぐポートにタグ付きパケットを流すようにする
  • Ubuntuの入ったパソコンの準備
    • 無線インターフェース(wlan0)の有効化
      • もし、USBドングルなどを利用する場合はドライバのインストールを事前にしておく

:one: 仮想VLANインターフェースの作成

まずUbuntu内で仮想インターフェースを利用できる環境を用意する。
とりあえずL2SWのアクセスポートにPCを繋いでインターネットに出れるようにする。

1.1 VLANに必要なソフトをインストール

ネットワークインターフェース周りを弄る前に必要なパッケージをインストールする。
これによりvconfigというVLANインターフェースを扱うためのコマンドが使えるようになる。

~/
sudo apt install vlan

1.2 networkmangerを止める

何かと邪魔してくるのでnetworkmanagerを止める。
うまくやれば止めなくても動くかもしれない。

~/
sudo service network-manager stop
sudo update-rc.d -f network-manager remove

1.3 8021qモジュールの追加

タグ付きパケットを扱うために必要なモジュールをLinuxカーネルにロードする。

~/
sudo modprobe 8021q

再起動後も有効化するために書いちゃう

~/
sudo su -c 'echo "8021q" >> /etc/modules'

1.4 イーサネットを挿す

事前に用意したトランクポートとUbuntuのPCをイーサネットでつなぐ。

1.5 仮想インターフェースの追加

VLANインターフェースを追加する

~/
# eth0にvlan100のインターフェースを追加する。
sudo vconfig add eth0 100
# eth0にvlan200のインターフェースを追加する。
sudo vconfig add eth0 200

1.6 L2動作確認

vconfigの設定ファイルは以下の場所にある。動いていればeth0.100あたりにパケットが来ているはずである。

/etc/proc/vlan
%ls
config  eth0.100  eth0.200

%sudo cat config
VLAN Dev name    | VLAN ID
Name-Type: VLAN_NAME_TYPE_RAW_PLUS_VID_NO_PAD
eth0.200       | 200  | eth0
eth0.100       | 100  | eth0


% sudo   cat eth0.200
eth0.200  VID: 200       REORDER_HDR: 1  dev->priv_flags: 1
         total frames received         1497
          total bytes received       171346
      Broadcast/Multicast Rcvd          167

      total frames transmitted          784
       total bytes transmitted       101369
Device: eth0
INGRESS priority mappings: 0:0  1:0  2:0  3:0  4:0  5:0  6:0 7:0
 EGRESS priority mappings:

1.7 静的IPアドレスの設定

別に静的である必要は無い気がするが管理用に固定されてると良いので。
auto eth0をコメントアウトしておく。環境によっては無いかもなのでそのままパス。

/etc/network/iterfaces
auto lo
iface lo inet loopback

# 元のeth0はautoで立ち上がらせないようにしておく。
#auto eth0

auto eth0.200
iface eth0.200 inet static
        address 10.200.200.100
        netmask 255.255.0.0
        gateway 10.200.0.1
        vlan-raw-device eth0
        nameservers 8.8.8.8
        nameservers 8.8.4.4
auto eth0.100
iface eth0.100 inet static
        address 10.100.200.100
        netmask 255.255.0.0
        gateway 10.100.0.1
        vlan-raw-device eth0
        nameservers 8.8.8.8
        nameservers 8.8.4.4

1.8 ネットワーク再起動

ネットワークを再起動して動くか確認

~/
sudo service networking restart

エラーを吐く時は、ipコマンドで追加したインターフェースを立てたり落としたりしてみる。
ためしにアドレスを振ってみたりする。弊環境ではこのゴニョゴニョで動くようになった。
チートシートはこちら。RedHat用だが大方共通して動く。
ip コマンド チートシート

:two: 無線インターフェースとVLANインターフェースを紐付ける

2.1 必要なソフトのインストール

hostapd がAPモードで無線インターフェースをそもそも動かすために必要なソフト。入れる。

~/
sudo apt install hostapd

create_ap はコマンド一つでAPを構築して無線が吹けるステキなアプリケーション。
gitから持ってきて,ビルドしてinstall。

~/
git clone https://github.com/oblique/create_ap.git
cd create_ap
make install

2.2 無線を吹く

installが終わったらさっそく無線を吹く。
create_ap は様々なオプションがあるので最適な設定を追い求める必要がある。特に使用するチャンネルなど...。
公式リポジトリを見る限りsystemdにも出来るみたい。

~/
# 一例
create_ap -m bridge wlan0 eth0.200 --ieee80211n --ht_capab '[HT40+]'  home NyanCat!

2.3 もう一個吹く...

今回の目的は複数VLAN/SSIDを吹くことである!!

ということでもう一個吹こうとしたところ....複数プロセスが同時に一つのインターフェース(今回であればwlan0)に触ることが出来ないらしく異常終了する。むう残念。

仕方がないのでもう一個USBドングルでインターフェースを追加して無線を吹く。

~/
# 一例
create_ap -m bridge wlan0 eth0.100 --ieee80211n --ht_capab '[HT40+]'  business musenlanbenrithanyusen

出来た。

:cross: 機会点

結果的にはドングルをもう一個挿すという悲しい結果になってしまいまった...悔しい。

が、希望が無いわけではなくcreate_apがラップしているhostapdのconfigオプションにこんな記述があることを発見した。

vlan_bridge
無線 LAN と、タグ付けされたインターフェイスを追加するブリッジ(接頭辞)。
引用元:hostapd.conf 覚書

なんかVLANインターフェースを創るところからこいつでできそうな雰囲気を醸し出している。

:pray: 終わりに

  • 今回は残念ながらAdvent Calendar記事という都合上、歯切れの悪い段階での投稿になってしまった。(計画性が無いとも言う) :fire:
  • 結果的に自分の環境ではドングルを追加することにより複数VLAN/SSIDを達成したが、ダサいので今後hostapd本体での構築に取り組みたい。 :boom:
  • ここまでせっかくお読み戴いたSFC-RG界隈の皆様,たまたま巡り会えた皆様大変申し訳ございません...。
  • 「俺もう既にやってるよ」な方や「こういうやり方でやってみたら?」というご奇特な御方がいらっしゃいましたらコメント欄・編集リクエストにてご連絡下さい。:pray:

refs.

全て2017年12月閲覧

LinuxPCをWiFiアクセスポイントにする
コマンド一発でLinuxマシンを即席無線LANルーターにできる「create_ap」がすごい便利だった
vlan - Ubuntu Wiki
Ubuntuで固定IP運用
NetworkManagerを使用しないネットワーク設定
virtual boxの仮想マシンがtagged VLANのネットワークに接続する方法
ttanimu engineering labs
タグVLAN&KVM サーバを作る① 環境構築
vconfig メモ
ip コマンド チートシート
Correct way to create VLAN and bridges on Ubuntu 14.04?
Ubuntu 16.04: bridgeインターフェースの設定
hostapd.conf 覚書