ページ

2021年3月14日日曜日

Raspberry Pi ルーターで DS-Lite と PPPoE 接続を共存させる

先日,楽天ひかりのIPv4 over IPv6 を利用するための設定方法をまとめたが,(下記参照)
Raspberry Pi を楽天ひかりのIPv4 over IPv6(DS-Lite・Xpass)に対応したルーターにする

今回はその続きとして,PPPoE による接続も共存させる方法.

なぜ,こんなことが必要かというと,DS-Lite方式の接続では,結局のところ,dgw.xpass.jp に対して作成したトンネルの出口をゲートウェイとして使っているので,ルーターがネットの世界と直接繋がっているわけではなく,SSH でルーターにログインしたり,Apacheを立ててHTTPでアクセスしたりすることができない.(正確にはIPv6を使えば接続可能だけど,できれば慣れ親しんだIPv4で接続したい)

これを実現するには,PPPoE の接続が必要になるが,ルーティングテーブルを適切に設定しないと,PPPoE 接続と,DS-Lite 接続のどちらを優先すべきかルーターが判断できなくなってしまう.

これを踏まえ今回は,DS-Liteと共存させるための,PPPoE 接続の方法及びルーティングテーブルの設定方法を記載する.

pppoeconf を利用して自動接続しても良いが,以前の研究結果を元に今回はすべて手動で設定していく.

PPPoE接続の設定


1. パッケージのインストール
 $ sudo apt install pppoe


2. 設定ファイルの編集
設定が完了したら再起動し,ifconfig コマンド等で接続されたか確認する
/etc/ppp/pap-secrets(追記)
------------------------------
"raXXXXXXXXXX@m.rakutenbb.jp" * "password"

/etc/ppp/chap-secrets(追記)
------------------------------
"raXXXXXXXXXX@m.rakutenbb.jp" * "password"

/etc/ppp/peers/dsl-provider(以下のように修正)
------------------------------
# pty "/usr/sbin/pppoe -I eth0 -T 80 -m 1452" ←コメントアウト
# defaultroute                                ←コメントアウト
plugin rp-pppoe.so eth1                       ←追記
user "raXXXXXXXXXX@m.rakutenbb.jp"            ←追記

/etc/network/interfaces(追記)
------------------------------
auto dsl-provider
iface dsl-provider inet ppp
pre-up /bin/ip link set eth1 up
provider dsl-provider

auto eth1
iface eth1 inet manual

注)ユーザーIDとパスワードは別途プロバイダーから通知されているものを入力する.
注)defaultroute をコメントアウトすることで,ルーティングテーブルに宛先 default として自動的に追加されるのを防ぐ


FireWallの設定


冒頭にリンクを貼った記事ですでに,iptablesの設定を実施しているので,以下の赤字箇所を追記する.ここでは22番ポートを解放してSSH を許可するよう設定した.
/etc/iptables.settings(赤字の箇所を追記)
------------------------------
*filter
:INPUT DROP [0:0]
:FORWARD DROP [0:0]
:OUTPUT ACCEPT [0:0]
-A INPUT -i lo -j ACCEPT
-A INPUT -p icmp -j ACCEPT
-A INPUT -p tcp --dport 22 -j ACCEPT
-A INPUT -s 192.168.100.0/24 -i br0 -j ACCEPT
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 192.168.100.0/24 -i br0 -o ds-lite -j ACCEPT
-A FORWARD -d 192.168.100.0/24 -i ds-lite -o br0 -j ACCEPT
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT
COMMIT


ルーティングテーブルの設定


ここまでの設定で通信手段は確保したが,通信経路が定まっていない.仮に外部からのSSHの接続元が特定の一箇所ないしは,サブネットマスク指定で表現できるところからに限定可能ならば,デフォルトのルーティングテーブルに追加するだけで済むが,不特定多数の箇所から接続できるようにする場合,宛先が default になる.

しかし,宛先が default の経路ははすでにDS-Lite接続に設定しているため,二重に設定することはでいない.

そこで,ルーティングテーブル自体を追加して,ppp0 宛の SSH 接続に関しては,追加したルーティングテーブルを参照するようルールを追加する.また,死活チェックのために,pingも通るようにした.
/etc/rc.local(追記)
------------------------------
ip route add default dev ppp0 table 128
ip route add 192.168.100.0/24 dev br0 table 128
ip rule add ipproto icmp dev ppp0 table 128
ip rule add ipproto icmp dev lo table 128
ip rule add dport 22 dev ppp0 table 128
ip rule add sport 22 dev lo table 128


再起動し,設定が反映されているか確認する.
$ ip route show table main
default dev ds-lite scope link
XXX.XXX.XXX.XXX dev ppp0 proto kernel scope link src XXX.XXX.XXX.XXX
169.254.0.0/16 dev eth1 scope link src 169.254.150.132 metric 203
192.168.100.0/24 dev br0 proto dhcp scope link src 192.168.100.1 metric 206

$ ip route show table 128
default dev ppp0 scope link
192.168.100.0/24 dev br0 scope link

$ ip rule show
0:      from all lookup local
32762:  from all iif lo sport 22 lookup 128
32763:  from all iif ppp0 dport 22 lookup 128
32764:  from all iif lo ipproto icmp lookup 128
32765:  from all iif ppp0 ipproto icmp lookup 128
32766:  from all lookup main
32767:  from all lookup default

設定に問題がなければ,試しにスマホのモバイル通信など,外部のネットワークから,ppp0 のIPアドレス宛にSSH接続できるか確認する.

0 件のコメント:

コメントを投稿