Raspberry Pi によるWi-Fi AP付PPPoEルーター構成
自宅で連続稼動しているルーターの構成です。
無償で何でも構築できてしまうソフトウエア群、素晴らしいですね!

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

ブロードバンドルーターの構築(pdfファイル 456 kバイト) の内容に基き、一部更新すると共に具体的な設定内容を記載します。
モバイル端末縦向きでは見辛いですので、横向きかPCブラウザでどうぞ。



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 Stretch 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  #/etc/ppp/options にあるので重複(笑)。
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
bridge=br0    # 起動後br0にブリッジ接続
driver=nl80211
ssid=RaspberryPi # SSIDを設定
hw_mode=g
channel=2
ieee80211n=1
wmm_enabled=1
ht_capab=[HT40][SHORT-GI-20][DSSS_CCK-40]
macaddr_acl=0
auth_algs=1
ignore_broadcast_ssid=0
wpa=2
wpa_key_mgmt=WPA-PSK
wpa_passphrase="password" # パスフェーズを設定
rsn_pairwise=CCMP


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

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

★ ssmtp

各種メール通知の為に追加。(sendmailが入っている場合は削除してから。)

・インストール
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等としておけばメール通知されます。
# この設定内容の場合、送信元アドレスは、root@seasky.blue となります。


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 の設定をファイルに保存しておく。
但し、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化(FUSEマウント編)

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


6.その他

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

・/usr/local/bin/mydns-ipnotice.sh

#!/bin/sh
wget -q -O /dev/null http://mydnsxxxxxx:passwd@www.mydns.jp/login.html

・/etc/crontab

# 10分毎に実行
7,17,27,37,47,57 * * * * root /usr/local/bin/mydns-ipnotice.sh 2>&1

★ WAN側IPアドレスのメール通知

*WAN側IPアドレスチェックスクリプト

・/usr/local/bin/ipchk.pl

ipchk.pl(テキストファイル 600バイト

・/etc/crontab

MAILTO=root

# WAN側IPアドレスが変化した場合、SSMTPにてメール通知
*/10 * * * * root /usr/local/bin/ipchk.pl 2>&1

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

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

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

#!/bin/sh
sudo ifconfig wlan0 up
sleep 3
sudo service hostapd start

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

#!/bin/sh
sudo service hostapd stop
sleep 3
sudo ifconfig wlan0 down

・/etc/crontab

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

★ 起動時の設定

/etc/rc.local の末尾にDDNS更新を追加。

sleep 15
/usr/local/bin/mydns-ipnotice.sh # 起動直後にDDNSのIPアドレス通知を行う

exit 0

★ NATでの通信速度



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

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


| Raspberry Pi | 15:49 | 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 31
<<   08 - 2019   >>
PROFILE
OTHERS
ARCHIVES