土曜は雨
コメダ、珍しくがら空き。

早くも台風の影響か・・・

それより、毎週土曜が悪天候で瞑想ツーリング出来ず、そろそろ限界。

先週強行しとけば良かったな・・・






| 週末の風景 | 11:43 | comments (x) | trackback (x) |
Raspberry Pi によるWi-Fi AP付PPPoEルーター
自宅で連続稼動しているルーターの構成です。

SoftEther VPNも載せていますが、ここでは省略しています。
また、TP-Link TL-WN823N のドライバ(8192eu.ko)を Fars Robotics Website 等から入手してインストールする必要があります。

ブロードバンドルーターの構築(pdfファイル 456 kバイト) の内容に基き、一部更新すると共に具体的な設定内容を記載します。


1.ハードウエア構成

・メインボード:Raspberry Pi 2 Model B
・eth1    :Anker A7611011 (RTL8153)
・wlan0   :TP-Link TL-WN823N (RTL8192EU)

*eth0(オンボードNIC)をWAN側、eth1をLAN側に割り当て。
*wlan0はhostapdによりeth1と共にbr0にブリッジ接続とし、cronにて時間帯指定で起動・停止。



*その他条件
・ルーターのホスト名は"gw"とする。
・LAN側ネットワークを192.168.1.0/24 ルーターのIPアドレスを192.168.1.254とする。
・Raspbian Buster Liteをベースとする。(実際は、Raspbian Wheezy Liteを順次アップデートした。)


2.システム設定

★ /etc/hostname

gw

★ /etc/hosts

127.0.0.1 localhost
192.168.1.254 gw.seasky.blue gw
192.168.1.1 seasky.blue

# seasky.blue は本サイトのドメイン名で、本サイトのURLにもなっておりDNATにてWebサーバー(192.168.1.1)を公開している。
# LAN内からはグローバルIPアドレスでWebサーバーにアクセスできない為、ここでローカルIPアドレスにて登録。
# dnsmasqへのDNS問い合わせ応答は、/etc/hostsが優先されるのでLAN内からホスト名でアクセス可能となる。

★ /etc/resolv.conf

nameserver 8.8.8.8

# パブリックDNS等を仮に入れておく。 ppp接続後はpppdによりプロバイダのDNSサーバーに置き換えられる。
# dnsmasへのDNS問い合わせ応答は/etc/hosts /etc/resolv.confの順に参照された結果となる。

★ /etc/sysctl.conf

net.ipv4.ip_forward=1  # IPフォワードをON


★ /etc/network/interfaces

source-directory /etc/network/interfaces.d


★ /etc/network/interfaces.d/interfaces

auto lo
iface lo inet loopback

auto eth0
iface eth0 inet static
address 0.0.0.0

auto eth1
iface eth1 inet static
address 0.0.0.0

#wlan0は自動でupせず、Wi-Fi APを使用する時間帯のみup(cronでup・down)しています。
#auto wlan0
#iface wlan0 inet static
#address 0.0.0.0

auto br0
iface br0 inet static
address 192.168.1.254
netmask 255.255.255.0
network 192.168.1.0
broadcast 192.168.1.255

bridge_ports eth1    # LAN側NIC
bridge_stp off
bridge_maxwait 10

auto dsl-provider
iface dsl-provider inet ppp
pre-up /bin/ip link set eth0 up # line maintained by pppoeconf
provider dsl-provider
up iptables-restore < /etc/iptables.ipv4.nat  #4.で作成したファイルを読み込む。

*尚、DHCPクライアント(dhcpcd等)やOpenresolvは完全に削除しておくこと!!


3.追加パッケージ

★ ntp

WAN側のntpサーバーと時刻同期するとともに、LAN側のntpサーバーとして使用。

・インストール
apt-get install ntp

・設定ファイル
/etc/ntp.conf

# pool 0.debian.pool.ntp.org iburst
# pool 1.debian.pool.ntp.org iburst
# pool 2.debian.pool.ntp.org iburst
# pool 3.debian.pool.ntp.org iburst

pool ntp.jst.mfeed.ad.jp iburst  # 近くの信頼できるサーバーに変更。

restrict -4 default kod notrap nomodify nopeer noquery limited  #デフォルトで時間交換の制限なし。



★ bridge-utils

Wi-Fiアダプタ(wlan0)やVPNのtapデバイスをLAN側インタフェースにブリッジ接続する為に導入。

・インストール
apt-get install bridge-utils

・設定ファイル
前述の /etc/network/interfaces.d/interfaces にて、LAN側インタフェースとして br0 を作成し、LAN側NIC eth1 をブリッジ。


★ pppoe
★ pppoeconf

カーネルモードpppの為に追加。
pppoeconfにより、導入時に対話型形式で設定ファイルを自動生成。

・インストール
apt-get install pppoe pppoeconf

・設定ファイル

pppoeconf で対話形式により設定されるファイルのリスト

ファイル            機能
/etc/ppp/peers/dsl-provider   pppoeconf がpppoe に合わせて生成した pppd の設定ファイル
/etc/ppp/options        pppd のための一般的な実行パラメーター
/etc/ppp/pap-secret       PAP のための認証データー (安全上問題ありで使用しない)
/etc/ppp/chap-secret      CHAP のための認証データー

その他、NetfilterのMSSクランプ追加スクリプト /etc/ppp/ip-up.d/0clampmss と/etc/ppp/ip-down.d/0clampmssが生成される。

*常時接続の為 /etc/ppp/options に以下を追記。

persist
maxfail 0

これにより、リンクダウン時に自動で延々再接続を試みる。

*/etc/ppp/peers/dsl-provider

noipdefault
usepeerdns
defaultroute
hide-password

# PPPキープアライブの設定 LCPエコーリクエスト3回リトライエラーでPPPoEを再接続。
lcp-echo-interval 20
lcp-echo-failure 3

connect /bin/true
noauth
persist
mtu 1454  #LCPネゴシエーションで決まった値が優先されるので、通常はこの数値を変えても反映されない。
noaccomp
default-asyncmap
plugin rp-pppoe.so eth0 #カーネルモードPPPのプラグイン
user "xxxxxxx@xxx.so-net.ne.jp"  # プロバイダのPPP接続ユーザーアカウント

*/etc/ppp/chap-secret
"xxxxxxx@xxx.so-net.ne.jp" * "password"   # PPP接続ユーザーアカウントとパスワード

★ dnsmasq

DHCPサーバーとDNSキャッシュ機能の為に追加。

・インストール
apt-get install dnsmasq

・設定ファイル

* /etc/dnsmasq.conf
# dns-serverとntp-serverとしても192.168.1.254を指定。

interface=br0
dhcp-range=192.168.1.20,192.168.1.40,12h
dhcp-option=option:netmask,255.255.255.0
dhcp-option=option:router,192.168.1.254
dhcp-option=option:dns-server,192.168.1.254
dhcp-option=option:ntp-server,192.168.1.254

★ hostapd

Wi-FiアダプタのAPモード設定とLAN側へのブリッジ接続の為に追加。

・インストール
apt-get install hostapd

・設定ファイル

* /etc/hostapd/hostapd.conf

interface=wlan0  # APとして使用するデバイスを指定
bridge=br0    # 起動後br0にブリッジ接続
driver=nl80211  # カーネルモジュール(mac80211)とのインタフェースドライバを指定
ssid=RaspberryPi # SSIDを設定

# IEEE 802.11n 関連の設定
hw_mode=g    # 2.4 GHz帯を指定
channel=6    # チャンネル番号を指定 [HT40-]の場合 5~13
ieee80211n=1   # 11nを有効
wmm_enabled=1  # QoS制御を有効
ht_capab=[HT40-][SHORT-GI-20][SHORT-GI-40]  # チャンネルボンディングの設定

# 認証アルゴリズム他
macaddr_acl=0  # MACアドレスが拒否リストになければ受け入れる
auth_algs=1   # 許可する認証アルゴリズムを指定  1 = 共有キー認証
ignore_broadcast_ssid=0  # 1 の場合SSIDを公開しない

# 認証方式を WPA2-PSK (WPA2事前共有鍵認証) として設定
wpa=1         # WPA2を有効化
wpa_key_mgmt=WPA-PSK  # 受け入れる鍵の管理アルゴリズムを指定
wpa_passphrase=“passphrase" # WPA-PSK 用の パスフレーズ
rsn_pairwise=CCMP # 暗号化アルゴリズムを指定  CCMPはAESに基づく暗号化


なお、hostapdは自動で起動せず、Wi-Fi APを使用する時間帯のみ起動(cronで起動・停止)しています。
インストール直後やアップデート後は自動起動になりますので、insserv -r hostapd で無効化しておきます。

Busterでinsserv -r hostapd とするとマニュアル起動も出来なくなるので、systemctl unmask hostapd 且つ systemctl disable hostapd


★ rngd

乱数のエントロピー増強の為に追加。

各種暗号化の為に使用される乱数は、/dev/random より得ますが、ヘッドレスな環境ですとエントロピーが不足しがちです。

cat /proc/sys/kernel/random/entropy_avail の値が1000以上であることが望ましく、少なすぎる場合はWi-Fi通信速度が極端に遅くなるなどの問題が発生します。
そこで、rngd 使用することで、環境侵害とハードウェア乱数ジェネレーターの両方を使用してエントロピーを抽出できます。

・インストール
apt install rng-tools

通常はインストールするだけでデーモンとして動作します。


★ msmtp

各種メール通知の為に追加。(sendmail等が入っている場合は削除してから。)
ssmtpを使用していましたが、aptから消えたので置き換えました。


・インストール
apt install msmtp
apt install msmtp-mta

・設定ファイル

* /etc/msmtprc (chown root.root , chmod 600です。)

defaults
syslog on

tls on
auth on
syslog LOG_MAIL

account So-net
host mail.so-net.ne.jp
port 587
from root@seasky.blue
user xxxxxxx@xxx.so-net.ne.jp
password "password"

account default : So-net

# crontabで MAILTO=xxxxx@gmail.com 等としておけば MAILTO= で指定したアドレス宛にメール通知されます。

ssmtpより明快で使い易い!

------以下はssmtpの際のコンフィグです--------

・インストール
apt-get install ssmtp

・設定ファイル

* /etc/ssmtp/ssmtp.conf

root=xxxxx@gmail.com

mailhub=mail.so-net.ne.jp:587
AuthUser=xxxxxxx@xxx.so-net.ne.jp
AuthPass="password"
UseSTARTTLS=YES

hostname=seasky.blue

# 本設定により、root@gw宛のメールは so-netのSMTPサーバーによって xxxxx@gmail.com 宛に転送される。
# crontabでMAILTO=root等としておけばメール通知されます。


4.Netfilter設定ファイル

・ルーターの中核機能であるファイアウォールやNAT(SNAT/DNAT)を Netfilter のみで実現します。

★ /usr/local/bin/make_iptable.sh

・iptablesコマンドによるスクリプト
make_iptable.sh(テキストファイル 4kB


PPPoE未接続の状態で make_iptable.sh を実行し、sudu iptables-save > /etc/iptables.ipv4.nat にてiptables の設定をファイルに保存しておく。

PPPoE接続確立後に make_iptable.sh を実行して /etc/iptables.ipv4.nat のファイル出力を行った場合、下記 mangleの項目(以下のMSS クランプ)は、pppoe接続時にスクリプト(/etc/ppp/ip-up.d/0clampmss)で追加された項目なので、次回起動時に重複しないよう削除しておく。

*mangle
-A FORWARD -o ppp0 -p tcp -m tcp --tcp-flags SYN,RST SYN -m tcpmss --mss 1400:65495 -j TCPMSS --clamp-mss-to-pmtu
COMMIT


5.SDカードのROM化

・下の手順で停電などの電源ブチ切に備えます。

OverlayfsによるRaspberry PiのSDカードROM化

以上でルーターとしての基本的な動作は完成。


6.その他

★ DDNSクライアント(MyDNS.JP)

・/etc/ppp/ip-up.d/mydns-ipnotice

#!/bin/sh

wget -q -O /dev/null http://mydnsxxxxxx:password@www.mydns.jp/login.html

# 新しいIpアドレスをmsmtpでメール通知

_IP=$(hostname -I) || true
if [ "$_IP" ]; then
echo "GW0 started! IP address is" "$_IP" | msmtp -C /etc/msmtprc xxx@gmail.com
fi

exit 0

PPPoE接続確立直後に /etc/ppp/ip-up.d/ 配下のスクリプトが実行されることでIPアドレス通知を実行。


・/etc/crontab

7,17,27,37,47,57 * * * * root /usr/bin/wget -q -O /dev/null http://mydnsxxxxxx:password@www.mydns.jp/login.html

PPPoE接続後は10分毎に実行


★ Wi-Fi APのタイマー起動・停止

*Wi-Fiアダプタは消費電力が高めなので、使用する時間帯のみUP。

・/usr/local/bin/ap-up.sh

#!/bin/sh
sudo service hostapd start

・/usr/local/bin/ap-down.sh

#!/bin/sh
sudo service hostapd stop


・/etc/crontab

00 20 * * 1-5 root /usr/local/bin/ap-up.sh
30 19 * * 6,7 root /usr/local/bin/ap-up.sh
15 22 * * 1-4,7 root /usr/local/bin/ap-down.sh
00 23 * * 5,6 root /usr/local/bin/ap-down.sh


★ NATでの通信速度



100Mのサービスなんで、とりあえずボトルネックにはなってません。

多少遅くたって、つまらないコンシューマー向けルーターから開放されるのが何より嬉しい(笑)



| Raspberry Pi (Linux) | 15:49 | comments (x) | trackback (x) |
早くも2年6か月
ラズパイルーター、2年6か月連続稼働でトラブルなし!

今や、自宅のインフラとして必須アイテム。

市販ルーターはあまりにつまらないから、凄く在り難い!
100Mのサービスなら、性能も十分だし。

ラズパイ依存に拍車がかかる(笑)






| 日記 | 18:55 | comments (x) | trackback (x) |
彼岸

彼岸花の群生を楽しみながら北西方面を流し、例により養老で養老。

今日は暑くなりそう







| 週末の風景 | 13:43 | comments (x) | trackback (x) |
養老で養老
ようやく来れた。

雨も降ってない。

あとで気になって調べたが、手前のオーリス、ガンダムとのコラボ 「シャア専用オーリス」みたいだ。 
「シャア専用」とはシャア・アズナブル仕様のモビルスーツの総称らしい。
このオーリスは車の形をしたモビルスーツなのか?!







| 週末の風景 | 13:45 | comments (x) | trackback (x) |

  
CALENDAR
S M T W T F S
            1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30       
<<   09 - 2018   >>
SEARCH
PROFILE
OTHERS
ARCHIVES