本ページは広告が含まれています。気になる広告をクリック頂けますと、サーバ運営費になります(^^
当初はWin10でインターネットルータを作成し、動画視聴もこのルータで思っていたのですが、WindowsのNAT仕様がイマイチな事に気づき断念しました。ICSインターネット共有で問題ない方はそちらで。
実現した事
- NATルータ(家庭用ルータと同じ動き)
- FireTV化 動画視聴端末
- 無線LANルータ
- 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ルータで利用しているとても安定
搭載するSSDはこれ
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
- 製品保証:永久保証
Micron Technologyは、企業向けにこうした半導体チップや、メモリモジュール等を販売しており、コンシューマ向けの販売子会社として設立されたのがCrucial Technology
現在大手とされるメモリチップメーカーは、エルピーダメモリ、Samsung Electronics、Hynix Semiconductor、Micron Technologyの4社のみ。この4社の刻印のあるメモリチップは少なくともメーカーの検証をパスしたもの
本製品はメモリ採用基準がシビアな Apple 純正 としても採用されている Crucial (Micron) 物。
Amazonで購入翌日には到着
しめて¥ 32,279。発注した翌日には到着です。
Debian Jessie64bit版のインストール
これも難なく進みます。外付け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のインストール
NTPは、時刻同期のために入れておきます。入れっぱなしで大丈夫です。勝手に起動して同期してくれます。時刻がインターネット標準時になっていれば、ログを見る時なども正確に見ていく事ができます。
apt-get install ntp
Postfixのインストール
サーバだと何かとメールを送りたがるので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サーバを設定
クライアントからドメイン名解決するために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
DHCPサーバ化します
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設定
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サーバを公開しています。そのうち、こちらの本体に切り替えますが。
PPPoE設定
apt-get install ppp pppoeconf pppoeconf
pppoeconfを走らすと、設定ウィザードが動きますので、pppoe接続のユーザ名・パスワードを入力します。
無線LANアクセスポイントにする
内臓の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は正常か?
ルータは常時稼働するし、突然止まられても困る。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
ここにエラーがたまってきて、致命的なものやエラーログが増えてきたら要注意です。
Chromeのインストール
結論として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
DDNSクライアント設定
自宅サーバを公開するためには必須の設定です。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/*>
この部分が通常のコンフィグと違うので注意する事
これから以下はうまくいかなかったこと
以下は、やりかけたけどうまくいかなかったこと。途中までやってみたけど時間の関係で諦めました。
内臓チップ rtl8821aeを利用する場合 クライアントならOK
以下の方法で、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
に組み込まれている事が分かる
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アドレス取得ネットワークに接続できる事を確認した
無線LANアクセスポイントにする
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接続ができない状態となる。
他のディスプレイマネージャもインストールしておく
HDMIから音を出す
パーミッションエラーバグ
rootで起動
/etc/pulse/daemon.conf
に daemonize = 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
これでも音出ない