この記事はSFC-RG Advent Calendar 2017の12日目です。
自宅に研究室の回線を引いて家で進捗を埋めるようにする準備。
概要
目的
VLAN(802.1qタグ付きパケット)が吹けるAPって高い
PoEスイッチが無い場合ACアダプターも一緒に買わないといかん
引用:http://amzn.asia/3eJEdHN
業務用途だと良いんだけどオタク個人用途で使うのにはちょっと気が引ける。
やること
- Ubuntuにタグ付き
- 使わないパソコンを複数VLAN/SSIDが吹けるアクセスポイントにして節約する
構成
環境
- Ubuntu 16.04.3 LTS (Xenial Xerus)
- ASUS K53E
未検証だがRaspiのような小さいARM系のPCでも大丈夫。
L2/L3トポロジー図
設定内容
事前準備
- ルーター/L2SWの設定
- 使用するVLANとVLANインターフェースを用意しておく。
- NATする場合はNATの準備
- WANの準備 PPPoE/tunnel インターフェースなど
- Ubuntuをつなぐポートにタグ付きパケットを流すようにする
- Ubuntuの入ったパソコンの準備
- 無線インターフェース(wlan0)の有効化
- もし、USBドングルなどを利用する場合はドライバのインストールを事前にしておく
- 無線インターフェース(wlan0)の有効化
仮想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
あたりにパケットが来ているはずである。
%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
をコメントアウトしておく。環境によっては無いかもなのでそのままパス。
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 コマンド チートシート
無線インターフェースと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
出来た。
機会点
結果的にはドングルをもう一個挿すという悲しい結果になってしまいまった...悔しい。
が、希望が無いわけではなく、create_ap
がラップしているhostapd
のconfigオプションにこんな記述があることを発見した。
vlan_bridge
無線 LAN と、タグ付けされたインターフェイスを追加するブリッジ(接頭辞)。
引用元:hostapd.conf 覚書
なんかVLANインターフェースを創るところからこいつでできそうな雰囲気を醸し出している。
終わりに
- 今回は残念ながらAdvent Calendar記事という都合上、歯切れの悪い段階での投稿になってしまった。
(計画性が無いとも言う) - 結果的に自分の環境ではドングルを追加することにより複数VLAN/SSIDを達成したが、ダサいので今後hostapd本体での構築に取り組みたい。
- ここまでせっかくお読み戴いたSFC-RG界隈の皆様,たまたま巡り会えた皆様大変申し訳ございません...。
- **「俺もう既にやってるよ」な方や「こういうやり方でやってみたら?」**というご奇特な御方がいらっしゃいましたらコメント欄・編集リクエストにてご連絡下さい。
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 覚書