Debian LinuxでGigabit対応高性能マルチメディア無線LANルータ作成

当初はWin10でインターネットルータを作成し、動画視聴もこのルータで思っていたのですが、WindowsのNAT仕様がイマイチな事に気づき断念しました。ICSインターネット共有で問題ない方はそちらで。

実現した事

  1. NATルータ(家庭用ルータと同じ動き)
  2. FireTV化 動画視聴端末
  3. 無線LANルータ
  4. WordPressサーバ

常時電源がついているルータにFire TVの代わりをさせます。インターネットのYoutube動画とか、すぐに再生できる環境を作ります。

さらに、WiFiアクセスポイントルータ化します。

DDNSを利用したWordPress自宅クラウドサーバに仕上げます。

1台4役のマルチメディアルータを作りました。この作成方法です。このwebページの読者レベルはDebian Linuxをインストールしたことがある方をターゲットにしています。

Shuttle ファンレスベアボーンPC

Intel第6世代Skylake-Uプロセッサー搭載 CPU:Celeron 3855U DS67U

この筐体はベアボーンで、Gigabit Etherに対応したLAN端子を2ポート搭載。ルータをするには十分なスペックで、Win10対応もうたっています。業務用のGigabit Ether対応ルータは結構な値段しますし、Windowsで動画再生やその他作業ができる事を考えれば費用対効果も十分見込めるかと

LANポートが2つある、ファンレスPC

安いほうのDS67Uでも4Kに対応

業務用Debianルータで利用しているとても安定

 

WD SSD 内蔵SSD 2.5インチ 120GB WD Green SATA3.0 6G / 3年保証 / WDS120G1G0A

やはりルータにするならある程度の耐久性は考えないといけないですけど、WDは一流メーカ(評判はそこそこでHDDは故障率高いという評価もある)だし。3年保証もついているので、3年使えればという想いと、

「国産NAND使用」という説明しかないが、販売しているドスパラパーツ館によると、「搭載コントローラーはSilicon Motion製で、TLC NANDフラッシュメモリは東芝製」だという。

国産という響きに弱い私は、これでもいいんじゃないかと思っています。

D3N1600CM-4G [SODIMM DDR3L PC3-12800 4GB]

Micronの自社ブランドであるCrucial

  • 製品保証:永久保証

PC Watch

Micron Technologyは、企業向けにこうした半導体チップや、メモリモジュール等を販売しており、コンシューマ向けの販売子会社として設立されたのがCrucial Technology

Akiba PC

現在大手とされるメモリチップメーカーは、エルピーダメモリSamsung ElectronicsHynix SemiconductorMicron Technologyの4社のみ。この4社の刻印のあるメモリチップは少なくともメーカーの検証をパスしたもの

本製品はメモリ採用基準がシビアな Apple 純正 としても採用されている Crucial (Micron) 物。

しめて¥ 32,279。発注した翌日には到着です。

これも難なく進みます。外付けUSB-DVDドライブを接続。Boot PriorityにてUSB-DVDドライブの優先順位を上げ、Debian JessieのNetインストーラディスクからBoot。

私はウィンドウマネージャはKDEを選択いたしました。

また、設定する際にSSHを利用して手元のノートPCから操作できると便利です。SSHサーバも導入しました。

※Gnomeも使ってみようと思いましたが、Shuttleと相性が悪い?Gnome起動時にエラーが出て何もできなくなってしまうので、最終的にKDEにしました。

※64bitをインストールする理由。最初は32bit版をインストールしていたが、Chromeの提供が終了しておりアーカイブより無理やりChrome32bitを導入したがErrorで起動せず。32bit版を再インストールする事になった。

NTPは、時刻同期のために入れておきます。入れっぱなしで大丈夫です。勝手に起動して同期してくれます。時刻がインターネット標準時になっていれば、ログを見る時なども正確に見ていく事ができます。

apt-get install ntp

サーバだと何かとメールを送りたがるのでSMTPの設定をしておきます。といっても簡単でローカルからメールが投げられればOK。

標準の設定で、

setting mynetworks: 127.0.0.0/8 [::ffff:127.0.0.0]/104 [::1]/128

となっているのでこのままでOKですが、最近は変動IPからのメールを受け付けてくれるプロバイダもほとんどないので、あんまり意味ないか。

やっぱり考え直して2回目は導入しませんでした。

apt-get install telnet tcpdump dnsutils

クライアントからドメイン名解決するためにDNSサーバをインストールしておきます。BINDだとちょっと重厚なので、dnsmasqを利用します。

apt-get install dnsmasq

これも簡単で、インストールしたままでDNSサーバになります。

Windowsの時と同じようにNICが2枚指してあってもルーティングはしてくれません。(フォワーディングといった方が正確か?)

vi /etc/sysctl.conf

# Uncomment the next line to enable packet forwarding for IPv4
net.ipv4.ip_forward=1

再起動せず反映させます

sysctl -p
apt-get install isc-dhcp-server

設定

192.168.11.0 有線LAN eth1 のネットワークとして設定

192.168.12.0 無線LAN wlan0 のネットワークとして設定

vi /etc/dhcp/dhcpd.conf

subnet 192.168.11.0 netmask 255.255.255.0 {
   range 192.168.11.101 192.168.11.200;
   option domain-name-servers 192.168.11.1;
   option domain-name "shuttle";
   option routers 192.168.11.1;
   option netbios-name-servers 192.168.11.1;
   option netbios-node-type 8;
   option subnet-mask 255.255.255.0;
   option broadcast-address 192.168.11.255;
   default-lease-time 600;
   max-lease-time 7200;
}

subnet 192.168.12.0 netmask 255.255.255.0 {
   range 192.168.12.101 192.168.12.200;
   option domain-name-servers 192.168.12.1;
   option domain-name "shuttle";
   option routers 192.168.12.1;
   option netbios-name-servers 192.168.12.1;
   option netbios-node-type 8;
   option subnet-mask 255.255.255.0;
   option broadcast-address 192.168.12.255;
   default-lease-time 600;
   max-lease-time 7200;
}
vi /etc/default/isc-dhcp-server

# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
# Separate multiple interfaces with spaces, e.g. "eth0 eth1".
INTERFACES="eth1 wlan0"

再起動させて設定を反映します。

reboot

※無線と有線をブリッジする方法もあるが、今回はあえてeth0を共用に、wlan0はプライベートにするためネットワークを分けた

iptablesを設定し、NATできるようにします。NATはルータの基本機能で、LAN内のローカルIPをルータ外側のグローバルIPに変換します。

apt-get install iptables iptables-persistent
#!/bin/sh

iptables -F
iptables -F -t nat
#!/bin/sh

iptables -F
iptables -F -t nat

iptables -A INPUT -i lo -j ACCEPT

# For WordPress Server
iptables -t nat -A PREROUTING -i ppp0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.11.10

#INPUT chain

#インターネット側からの戻りのパケットは許可
iptables -A INPUT -i ppp0 -m state --state RELATED,ESTABLISHED -j ACCEPT
#インターネット側からの icmp 許可
iptables -A INPUT -i ppp0 -p icmp -j ACCEPT
#それ以外のppp0 からのアクセスは拒否
iptables -A INPUT -i ppp0 -j DROP

#Forward chain
#インターネット側からの戻りのパケットはフォワード許可
iptables -A FORWARD -i ppp0 -m state --state RELATED,ESTABLISHED -j ACCEPT

#これがないと、WindowsUpdateできない パスMTU問題
iptables -A FORWARD -o ppp0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

#LAN側からのフォワーディングは許可
iptables -A FORWARD -i eth+ -j ACCEPT

# LAN内からインターネット回線に出るときの IPマスカレード(NAPT設定)
iptables -t nat -A POSTROUTING -o ppp0 -j MASQUERADE

起動時自動的にiptables設定が読み込まれるようにします。

iptables-save > /etc/iptables/rules.v4

※192.168.11.10に古いノートパソコンで、WordPressサーバがいます。

iptables -t nat -A PREROUTING -i ppp0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.11.10

この一行を加える事で、LAN内にDNATし、WordPressサーバを公開しています。そのうち、こちらの本体に切り替えますが。

apt-get install ppp pppoeconf

pppoeconf

pppoeconfを走らすと、設定ウィザードが動きますので、pppoe接続のユーザ名・パスワードを入力します。

内臓のrtl8821aeチップでhostapdを利用し、無線LANアクセスポンとにしようと思ったが、アクセスポイントとして利用すると途中でバグってしまう。無線が掴めなくなるため、昔から利用しているUSBタイプの無線LANアダプタを利用しました。

WLI-UC-GNM

私が利用している環境では、Linuxととても相性がいいUSB無線LANアダプタで、1,000円未満で購入できる。Puppy Linuxでも問題なく認識。この無線LANアダプタでアクセスポイントを設定したところとても安定している。内臓の無線LANチップで設定するより良い成績となった。内臓のrtl8821aeチップで無線LANクライアントとして利用するには全く問題ない。アクセスポイントとして設定した時だけ不具合が出るので、ドライバの作り、ファームウェアの作りがまだ甘いのではないかと思う。

WLI-UC-GNMはまだ売ってる。息が長い無線LANアダプタでありがたいです。

USBに接続されているデバイス確認

lsusb -t

/: Bus 01.Port 1: Dev 1, Class=root_hub, Driver=xhci_hcd/12p, 480M
|__ Port 1: Dev 2, If 0, Class=Vendor Specific Class, Driver=rt2800usb, 480M

dmesgを確認すると

[ 841.898182] ieee80211 phy1: rt2x00lib_request_firmware: Info - Loading firmware file 'rt2870.bin'
[ 841.898195] rt2800usb 1-1:1.0: firmware: failed to load rt2870.bin (-2)
[ 841.898199] rt2800usb 1-1:1.0: Direct firmware load failed with error -2
[ 841.898202] rt2800usb 1-1:1.0: Falling back to user helper

firmware rt2870.binが組み込まれずエラーが出ている事が分かる

debian jessieでは firmware-ralink (non-free)にファームウェアが含まれてい事が分かる

contrib non-freeを追加

/etc/apt/sources.list

deb http://ftp.jp.debian.org/debian/ jessie main contrib non-free
deb-src http://ftp.jp.debian.org/debian/ jessie main contrib non-free

deb http://security.debian.org/ jessie/updates main contrib non-free
deb-src http://security.debian.org/ jessie/updates main contrib non-free

apt-get update

apt-get install firmware-ralink

すると、dmesg

[ 1552.723545] ieee80211 phy1: rt2x00lib_request_firmware: Info - Firmware detected - version: 0.29

firmwareが見つかった

apt-get install hostapd

vi /etc/hostapd/hostapd.conf

interface=wlan0
ssid=shuttle
hw_mode=g
channel=3
wpa=2
wpa_passphrase=password
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP

設定ファイルの場所を指定する

cat /etc/default/hostapd
DAEMON_CONF=”/etc/hostapd/hostapd.conf”

hostapdをそのまま起動させたい場合は

# /etc/init.d/hostapd start

wlan0に固定IPを振る

/etc/network/interfaces

auto wlan0
iface wlan0 inet static
address 192.168.12.1
network 192.168.12.0
netmask 255.255.255.0
broadcast 192.168.12.255

無線LANアクセスポイントからインターネットへ接続するためのiptables試験設定 eth0はまだDHCPで他のルータ配下にいる状況でちゃんとアクセスポイントになっているかを確認するため

#!/bin/sh

iptables -F
iptables -F -t nat

iptables -A INPUT -i lo -j ACCEPT

#INPUT chain

#インターネット側からの戻りのパケットは許可
iptables -A INPUT -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
#インターネット側からの icmp 許可
iptables -A INPUT -i eth0 -p icmp -j ACCEPT
#それ以外のeth0 からのアクセスは拒否
iptables -A INPUT -i eth0 -j DROP

#Forward chain
#インターネット側からの戻りのパケットはフォワード許可
iptables -A FORWARD -i eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT

#これがないと、WindowsUpdateできない パスMTU問題
iptables -A FORWARD -o eth0 -p tcp --tcp-flags SYN,RST SYN -j TCPMSS --clamp-mss-to-pmtu

#LAN側からのフォワーディングは許可
iptables -A FORWARD -i wlan0 -j ACCEPT

#OUTPUT chain
#インターネットへ向けてプライベートアドレスを放出しない

# LAN内からインターネット回線に出るときの IPマスカレード(NAPT設定)
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

ルータは常時稼働するし、突然止まられても困る。SSDには寿命もあるしちょっと気にして起きた時にはsmartctlツールを利用してS.M.A.R.T情報を確認しておくとある程度把握できると思います。

apt-get install smartmontools

S.M.A.R.T情報を全部見る

smartctl -a /dev/sda

最終行にエラーログが出てきます

SMART Error Log Version: 1
No Errors Logged

ここにエラーがたまってきて、致命的なものやエラーログが増えてきたら要注意です。

結論として32bitOSをインストールしちゃダメでした。Googleでは、32bit版のChromeの公開は終了しています。32bit版のChromeをアーカイブからダウンロードして設定してみましたが、正常に動作しませんでした。そこで64bit Debianを入れ直して、Chromeも64bitをインストール。インストーラは、Chromeを検索して「パソコン版をインストール」をクリックすると、自動的に出てくる。

google-chrome-stable_current_amd64.deb

操作は

dpkg -i google-chrome-stable_current_amd64.deb
apt-get install -f
dpkg -i google-chrome-stable_current_amd64.deb

とする事でインストールできた。下記32bit版のインストールと手順は同じ。

# dpkg -i google-chrome-42-0-2311-90-32-bit-multi-ubu.deb
以前に未選択のパッケージ google-chrome-stable を選択しています。
(データベースを読み込んでいます ... 現在 178173 個のファイルとディレクトリがインストールされています。)
google-chrome-42-0-2311-90-32-bit-multi-ubu.deb を展開する準備をしています ...
google-chrome-stable (42.0.2311.90-1) を展開しています...
dpkg: 依存関係の問題により google-chrome-stable の設定ができません:
 google-chrome-stable は以下に依存 (depends) します: libappindicator1 ...しかし:
  パッケージ libappindicator1 はまだインストールされていません。
 google-chrome-stable は以下に依存 (depends) します: libcurl3 ...しかし:
  パッケージ libcurl3 はまだインストールされていません。

dpkg: パッケージ google-chrome-stable の処理中にエラーが発生しました (--install):
 依存関係の問題 - 設定を見送ります
desktop-file-utils (0.22-1) のトリガを処理しています ...
gnome-menus (3.13.3-6) のトリガを処理しています ...
mime-support (3.58) のトリガを処理しています ...
man-db (2.7.0.2-5) のトリガを処理しています ...
処理中にエラーが発生しました:
 google-chrome-stable
# apt-get -f install
パッケージリストを読み込んでいます... 完了
依存関係ツリーを作成しています
状態情報を読み取っています... 完了
依存関係を解決しています ... 完了
以下の追加パッケージがインストールされます:
  libappindicator1 libcurl3 libdbusmenu-glib4 libdbusmenu-gtk4 libindicator7

再度

dpkg -i google-chrome-42-0-2311-90-32-bit-multi-ubu.deb

最新のWordPressを複数設定する

設定落ち着いたので、このマシン自体をWordPressサーバ化しました。自宅クラウドサーバとして公開です。

公開するため、iptablesの設定を変更しています。

# For WordPress Server コメントアウト
#iptables -t nat -A PREROUTING -i ppp0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.11.10

#インターネット側からWordPressへのアクセス許可
iptables -A INPUT -i ppp0 -p tcp -m tcp --dport 80 -j ACCEPT

 

自宅サーバを公開するためには必須の設定です。myDNSを利用して構築しています。

MyDNS でマスタードメイン、サブドメイン設定してみた

mydnsのIDが取得で来たら、DDNSの更新処理を入れます。

/usr/bin/wget -O - 'http://mydns0000000:password@www.mydns.jp/login.html'

wgetで所定のURLへログインすると、IPアドレスが更新されます。IPアドレスが変更した際に自動的に上記を走らせる事ができれば良いのですが、そこまで実装できていません。毎時0分に上記を走らせるようにしています。IPアドレスの変更があっても、最長1時間以内に変更が通知できる仕組みです。

ワイルドカードDNSのアクセスをディレクトリに振り分け

apacheの設定ポイント

ServerAlias *.hoge.hanakohoge.co.jp

 VirtualDocumentRoot /var/www/%1

<Directory /var/www/*>

この部分が通常のコンフィグと違うので注意する事

以下は、やりかけたけどうまくいかなかったこと。途中までやってみたけど時間の関係で諦めました。

 

以下の方法で、hostapdを利用するとバグりますが、クライアントWiFiとして利用するのは問題ありませんでした。

PCIデバイスを表示する(マシンに認識されているか?)

lspci |grep Network

root@shuttle:/home/hanako# lspci |grep Network
01:00.0 Network controller: Realtek Semiconductor Co., Ltd. RTL8821AE 802.11ac PCIe Wireless Network Adapter
02:00.0 Ethernet controller: Intel Corporation I211 Gigabit Network Connection (rev 03)

ドライバモジュールが組み込まれているか確認

lsmod |grep rtl
rtl8821ae 501750 0
mac80211 425546 1 rtl8821ae
cfg80211 354137 2 mac80211,rtl8821ae

dmesg

[ 2.426527] rtl8821ae 0000:01:00.0: firmware: failed to load rtlwifi/rtl8821aefw.bin (-2)
[ 2.426638] rtl8821ae 0000:01:00.0: Direct firmware load failed with error -2
[ 2.426640] rtl8821ae 0000:01:00.0: Falling back to user helper
[ 2.445593] rtl8821ae-0:rtl8821ae_init_sw_vars():<0-0> Failed to request firmware!
[ 2.445598] rtl8821ae-0:rtl_pci_probe():<0-0> Can't init_sw_vars.

 

ファームウェアが組み込まれていない事が分かる

rtl8821aeは

firmware-realtek

https://packages.debian.org/hu/jessie/firmware-realtek

に組み込まれている事が分かる

contrib non-freeを追加

/etc/apt/sources.list

deb http://ftp.jp.debian.org/debian/ jessie main contrib non-free
deb-src http://ftp.jp.debian.org/debian/ jessie main contrib non-free

deb http://security.debian.org/ jessie/updates main contrib non-free
deb-src http://security.debian.org/ jessie/updates main contrib non-free

ファームウェアのインストール

apt-get install firmware-realtek

再起動してdmesgを見ると、rtl8821aefw.binが組み込まれている事が分かる

dmesg |grep firmware
[ 2.452651] rtl8821ae 0000:01:00.0: firmware: direct-loading firmware rtlwifi/rtl8821aefw.bin

無線LAN番号の確認

iwconfig
wlan0 IEEE 802.11abgn ESSID:off/any
Mode:Managed Access Point: Not-Associated Tx-Power=0 dBm
Retry short limit:7 RTS thr=2347 B Fragment thr:off
Encryption key:off
Power Management:on

Wicdネットワークマネージャ、ネットワークインターフェースに

wlan0

を設定

vi /etc/network/interfaces

auto wlan0
iface wlan0 inet dhcp

追記する

ifdown eth0

で一旦有線LAN側はダウンさせ、Wicdネットワークマネージャで無線LAN接続しIPアドレス取得ネットワークに接続できる事を確認した

apt-get install hostapd

vi /etc/hostapd/hostapd.conf

interface=wlan0
ssid=shuttle
hw_mode=g
channel=3
wpa=2
wpa_passphrase=password
wpa_key_mgmt=WPA-PSK
rsn_pairwise=CCMP

設定ファイルの場所を指定する

cat /etc/default/hostapd
DAEMON_CONF=”/etc/hostapd/hostapd.conf”

wlan0に固定IPを振る

/etc/network/interfaces

auto wlan0
iface wlan0 inet static
address 192.168.12.1
network 192.168.12.0
netmask 255.255.255.0
broadcast 192.168.12.255

dhcpサーバの設定を調整 無線LANインターフェース側からのIP払い出し

vi /etc/dhcp/dhcpd.conf

subnet 192.168.12.0 netmask 255.255.255.0 {
range 192.168.12.101 192.168.12.200;
option domain-name-servers 192.168.12.1;
option domain-name “shuttle”;
option routers 192.168.12.1;
option netbios-name-servers 192.168.12.1;
option netbios-node-type 8;
option subnet-mask 255.255.255.0;
option broadcast-address 192.168.12.255;
default-lease-time 600;
max-lease-time 7200;
}

DHCPサーバの受付を無線LANでも

vi /etc/default/isc-dhcp-server

# On what interfaces should the DHCP server (dhcpd) serve DHCP requests?
# Separate multiple interfaces with spaces, e.g. “eth0 eth1”.
INTERFACES=”eth1 wlan0″

iptables のテスト  wlan0をnatする

#!/bin/sh

iptables -F
iptables -F -t nat

iptables -A INPUT -i lo -j ACCEPT

#INPUT chain

#インターネット側からの戻りのパケットは許可
iptables -A INPUT -i eth0 -m state –state RELATED,ESTABLISHED -j ACCEPT
#インターネット側からの icmp 許可
iptables -A INPUT -i eth0 -p icmp -j ACCEPT
#それ以外のeth0 からのアクセスは拒否
iptables -A INPUT -i eth0 -j DROP

#Forward chain
#インターネット側からの戻りのパケットはフォワード許可
iptables -A FORWARD -i eth0 -m state –state RELATED,ESTABLISHED -j ACCEPT

#これがないと、WindowsUpdateできない パスMTU問題
iptables -A FORWARD -o eth0 -p tcp –tcp-flags SYN,RST SYN -j TCPMSS –clamp-mss-to-pmtu

#LAN側からのフォワーディングは許可
iptables -A FORWARD -i wlan0 -j ACCEPT

#OUTPUT chain
#インターネットへ向けてプライベートアドレスを放出しない
iptables -A OUTPUT -o eth0 -d 127.0.0.0/8 -j DROP
iptables -A OUTPUT -o eth0 -d 192.168.0.0/16 -j DROP
iptables -A OUTPUT -o eth0 -d 172.16.0.0/12 -j DROP
iptables -A OUTPUT -o eth0 -d 10.0.0.0/8 -j DROP

注意

Wicdネットワークマネージャに設定した無線インターフェースwlan0は消す事。消しておかないと、アクセスポイントにしたときに設定がバッティング、アクセスポイント動作が不安定になる。具体的には起動直後無線LANアクセスポイントとして動作するがしばらくすると、無線LAN接続ができない状態となる。

他のディスプレイマネージャもインストールしておく

デフォルトのディスプレイマネージャをkdmに変更する
dpkg-reconfigure kdm

HDMIから音を出す

apt-get install pavucontrol
aplay -l
https://gato.intaa.net/linux/linux-mint12-hdmi-audio
kdeの日本語化
task-japanese-kde-desktop
system setting
locale
prefference language に日本語を追加
HDMIから音を出したい

パーミッションエラーバグ

rootで起動

/etc/pulse/daemon.confdaemonize = yes を設定

これ変更すると pavucontrol画面が出なくなる

vi  /etc/pulse/default.pa

### Load analog device
load-module module-alsa-sink device=hw:0,0
load-module module-combine-sink sink_name=combined
set-default-sink combined

カーネルパラメータの設定

意味なかった

reboot

aplay -l を使ってカードとデバイス番号を取得

aplay -l
**** ハードウェアデバイス PLAYBACK のリスト ****
カード 0: PCH [HDA Intel PCH], デバイス 0: ALC662 rev3 Analog [ALC662 rev3 Analog]
サブデバイス: 1/1
サブデバイス #0: subdevice #0
カード 0: PCH [HDA Intel PCH], デバイス 1: ALC662 rev3 Digital [ALC662 rev3 Digital]
サブデバイス: 1/1
サブデバイス #0: subdevice #0
カード 0: PCH [HDA Intel PCH], デバイス 3: HDMI 0 [HDMI 0]
サブデバイス: 1/1
サブデバイス #0: subdevice #0

aplay -D plughw:0,3 /usr/share/sounds/alsa/Front_Center.wav

これでも音出ない

speaker-test -D plughw:0,3 -c2
これなら音が出る事を確認
speaker-test -D plughw:0,0 -c2

関連コンテンツ