はじめに
うちの地区にフレッツ光クロスがきてて、丁度Nuroが2年満期を迎えたので切り替えようといろいろ光クロス対応のルータを探してました。
やはり今使ってるルータもYAMAHAなのでRTX1300かなぁ?ってお値段が13万とすこぶるアタオカかかくなので、ソフトウェアルータを作ろうとしていろいろ調べてopenWRT(x86)に決定しました。
なんやかんや10Gbpsスイッチ買ったりしましたが、2万あればSFP2つついたルータは作成可能です。
回線は一般のご家庭らしくIPv4固定はしませんが、Cloudflare tunnel
を使って内部を公開することもできますし、VPN代わりに使う事もできましたのでそっちも追記しました。
RTX1300でやりたいことできたね。
OpenWRTとは?
OpenWRTは、ルータや組み込みシステム向けのオープンソースのLinuxベースのファームウェアで、カスタマイズ可能で高性能なネットワーク機能を提供します。
当然ながら無料で利用できます。
注意
今回はNTT東日本のドコモ光を利用し、HGWなしONUだけ契約です。同様のNTT東日本のフレッツ光クロスのHGWなしONUだけが対象になると思います。HGWを使った場合はしりません
NTT西日本もHGW必須だった気がするので、ONU直結のみの話で進めます。
プロバイダがMAP-e対応してるので使えてるとおもうので(@nifty)よその場合はちょっとわかんないですね・・
構築に必要な知識
- Linuxの基本設定、操作が不自由なくできる
- パーティーション拡張等が理解できる
- ある程度の機材は持っている(M.2 SSDをUSB変換できるとか設定端末があるとか)
- すでに光クロスの回線がある状態(なければないで何かしらの手段でインターネットにでられること)
- 日本語の理解度
ご用意するもの
今回用意した物は以下になります。(ルーター構築分だけのせてます)
1.Lenovo ThinkCentre M720q
※ヤフオクでなにも見ずにCPUメモリssd電源無しwifiなしの激安ジャンクを買い、足りないものは手持ちの物をつかった。
- PentiumGold-G5400
- M.2 nvme512GB
- DDR4SODIMM 8GB
似たようなM920qでもいいかもしれません。
2.aliexpressのm720q用のpci express変換アダプタ
aliexpressのページ
lenovoのM720qやM920qは内部にPCIexpressが増設スロットがあるので、SataSSDを取り外してやればカードが乗ります。
3.intel X520-DA2
ヤフオクでSFP+2個つき、sfpケーブル付きで5000円くらい、やすい!
4.低発熱なsfp用10Gbase-Tモジュール
aliexpressの販売ページ
※80Mのものを買いましょう。(低発熱で有名)※Broadcom BCM84891がいいらしい。
5.SFPモジュール
amazon
ciscoやintelかいてますが、ベンダーロックが気になるならintelで、八丁スイッチは特に問題なく接続できます。
なお、SFPモジュールは活線挿抜が可能です
6.CAT6aのLANケーブル
いろいろやって速度が出なかったのはONU間のケーブルが原因でした・・新品をかえということ。
7.キーボード・マウス・モニタ
とりあえずないと始まらない。
8.M.2のSSDをUSBに変換できるアダプタ
OSを書き込まないとはじまりません
9.SSHでつなげるPC
詳細はSSHでやるので
10.ubuntuやGPartedの入ったUSBメモリとか
ventoyにisoイメージ等をおいてマルチブートさせてるなりお好きな方法で、
あるとベンダロック解除・M.2 SSDの領域拡張ができます。
持っておいて損はない
ventoy
X520のベンダロック外し
amazonでかったX502-DA2のSFPカードはintel以外のSFPモジュールを差し込むとエラーが出力されて認識されないので、定番のベンダロック解除を実施します。
前書いた記事
大雑把に書きますがubuntuをインストールしてサクッと実施してください。
OpenWRTのインストール
インストーラーが今どき存在していない(なんで・・)
のでPCから取り外して、USB変換等につなぎ作業PCで書き込みます。
書き込みはRufusを使って書き込んでください。
OpenWRT
ここからrcのつかない数字の大きいものを選び、targets>x86>64>generic-ext4-combined-efi.img.gz
をダウンロードします。
Rufus
入れ方は省きますが
generic-ext4-combined-efi.img.gzを書き込んでください。
M720qにM.2SSDを収める
特に説明が不要だと思いますが取り付けましょう
ケースを開けて底板外せば収められます
X520を取り付け、小改造
分かる人はやってみてください。おすすめ
秋月電子で売ってる5vのVDCファン
をX520から電源を取って取り付けます(LEDそばに3.3vくるのでそことGND繋げばよい)
両面テープでインダクタの上に貼り付けます。M720qのフロンド側の金属パーツを外せば
全部収まってしまいます。aliで買った付属のベゼルの隙間から出すと
SFPが2つ外に出ます。
改造せずに収める場合
aliでかった変換アダプタを使い、付属のベゼルの隙間から出すと
SFPが2つ外に出ます。
OpenWRTの起動
ここまでくれば電源は入るかなと
root、パスワードなしでコンソールに入れます。
ちゃんとパスワードつけましょう
passwd
OpenWRTのデバイスとインターフェイスの紐づけを実施
OpenWrtでネットワークはデバイス(物理NIC)をインターフェイス(論理NW)と紐づけることで利用できます。
これを修正しないとNICからの制御もなんもできないので、ここを修正します。
・M720qには有線LANが1つあります、X520-DA2を接続することでポートが増えて
eth0,eth1,eth2という物理NW(OpenWrtでいうデバイス)が存在することになります。
自分の場合はX520-DA2がeth0,eth1となり,内蔵がeth2となりました。
(自身の場合はip aを叩いてmacアドレスで確認)
X520-DA2の場合、macアドレスが連番になるのでわかりやすいかなと。
なので、eth0をWAN側、eth1,eth2をbr-lan(ブリッジ)側にまとめてそれをlanとして認識させます。
もちろん個別にしてもいいです(今回は割愛)
X520を刺さずにセットアップしていた場合、interfaceのWANおよびWAN6はつくられていない場合があります。そのときは項目ごと作ってください。
vi /etc/config/network
を実施し、以下の箇所を修正します。#の箇所を修正、実際には#以降は消すこと!
WAN側(WAN、WAN6)
※なければ作る
config interface 'wan'
option device 'eth0' #ここの値を変更
option proto 'dhcp'
config interface 'wan6'
option device 'eth0' #ここの値を変更
option proto 'dhcpv6'
option reqaddress 'try'
option reqprefix 'auto'
option norelease '1'
LAN側
config device
option name 'br-lan'
option type 'bridge'
list ports 'eth1' #ここの値を変更
list ports 'eth2' #この行を追加
config interface 'lan'
option device 'br-lan'
option proto 'static'
option ipaddr '10.0.0.1' #ここはお好きに設定してください。
option netmask '255.255.255.0'
option ip6assign '60'
再読み込みは以下で実施
/etc/init.d/network restart
これでインターフェイスの準備ができます。以後はLAN側にLANケーブルを指して、操作端末からwebやSSHで設定していきます。
ブラウザはhttp://10.0.0.1
SSHは10.0.0.1
で接続を想定です
ディスクサイズの拡張
デフォルトでパーティションサイズが100MB程度しかないので、今後パッケージを数個いれるだけで満杯になるので
容量を拡張します。これは自分自身では実施できないので、用意しているGPartedディスク等に入っているGpartedを利用して
拡張を行います。やり方は割愛します。
参考
MAPの設定
WAN側にONUのケーブルを差込み、LAN側の操作端末から設定を進めます。(SSHでやります)
WAN6側でONUからDHCP6でIPv6アドレスが降ってくるので、設定は進められるはず。ここでWAN6が繋がらない場合は設定を見直しましょう
opkg update
opkg install map
インストール後、再起動を行ってください(reboot)
再起動後、webブラウザから設定したIP(今回は10.0.0.1)にアクセスして、
上のメニューのnetwork > interfaceを開き、WAN6の 「IPv6 PD: 240b:11:xxxx:xxxx::/56」をメモします。
これをmap-e計算ツール
のIPv6 プレフィックスアドレスを入力のところに先ほどの値を放り込み、計算結果をメモします。
option peeraddr 2404:XXXX:XXX:XXX::64
option ipaddr xxx.xx.0.0
option ip4prefixlen 15
option ip6prefix 240b:xx::
option ip6prefixlen 31
option ealen 25
option psidlen 8
option offset 4
export LEGACY=1
次にnetwork > interface > Add new interfaceを開き、
Name: 適当にWAN7とかなんでも
Protocol: MAP/LW4over6
Interfaceの詳細を入力する画面がでるので、以下を設定
■General Setting
BR / DMR / AFTR :option peeraddrの値
IPv4 prefix:option ipaddrの値
IPv4 prefix length:option ip4prefixlenの値
IPv6 prefix:option ip6prefixの値
IPv6 prefix length:option ip6prefixlen
EA-bits length:option ealenの値
PSID-bits length:option psidlenの値
PSID offset:option offsetの値
■Advanced settings
Tunnel Link:WAN6
Use legacy MAP:チェック
■Firewall Settings
Wanに追加
■DHCP Server
触らず
入力が終わりましたら再起動をしてください。
うまく動作すればinterfaceにWAN7とWAN7_みたいなインターフェイスができれば成功です。
テスト
テストサイト
にアクセスして、西日本以外がOKでればIPv6/IPv4疎通成功です。
残設定
日本語パッケージ,cloudflaredパッケージ導入 パッケージアップデート
公式ドキュメントにアップデートは一気にやらないでーとは書いてますが、sshで以下を実施
opkg update
opkg install cloudflared luci-i18n-cloudflared-ja luci-i18n-base-ja luci-i18n-firewall-ja luci-i18n-package-manager-ja
opkg list-upgradable | cut -f 1 -d ' ' | xargs opkg upgrade
あとはSystem-System-Language and Styleで変更して保存してください。
NATオフロードの設定
ネットワーク>firewall>一般設定のルーティングNATオフロードをハードウェアオフロード
で設定、保存します。
Cloudflare tunnelの導入
IPoE接続ではIPv4固定オプションを別途契約、設定しない限り、IPv4は共有となってしまいます。(しかも月額結構するよね)
- 家の中のサーバを外部に出したい
- トンネルで家の中のネットワークにつなぎたい
いろいろありますが、OpenWRTにCloudflaredを導入することで安全に解決できます。
Cloudflare tunnelとは?
Cloudflare Tunnelは、Cloudflareのネットワークを通じて自宅やオフィスのサーバーをインターネットに安全に公開するためのサービスです。これにより、固定IPがなくても外部から自宅のネットワークにアクセスできます。設定は簡単で、セキュリティも強化されます。
となっており、DDoS防いでくれたり暗号化してくれたりといろいろしてくれます。
OpenWRTのfirewallの設定もいじることすらありません
tunnelは無料で利用できます。(アプリケーション公開はドメイン必要ですが、そもそもCloudflareのドメイン価格がとにかくやすい)
トンネル方法は以下の2つが利用できます。
-
アプリケーション公開
- ドメインの指定で内部ネットワークのホストIP:portを外部に見せることが可能。(複数指定可能)
www.hogehuga.com
>http://192.168.100.200:80
- ドメインの指定で内部ネットワークのホストIP:portを外部に見せることが可能。(複数指定可能)
-
プライベートネットワーク
- 内部のネットワークとCloudfraredが橋渡しを行い、クライアントソフト(WARP)でOpenWRTの内部の各システムへアクセス可能、特に設定を書かなくてよいのでおすすめ。まるでVPNで社内セグメントアクセスしてるようだ。
調べた感じ、アプリケーション公開しつつプライベートネットワークは使えないぽい。
Cloudflareのcommunity
Cloudflaredの設定
操作端末のブラウザでCloudflareを開きアカウントを作成、ログインする、
この段階でチームドメインの設定があるので、作ってください。
(後で使います)
左のZeroTrustを開き、ネットワーク>Tunnelsをクリックします。
トンネルの作成をクリックし、Cloudflaredを選択します。
トンネル名を適当に設定し、トンネルを保存をクリックします。
コネクタをインストールするよう指示がでるので、
Tokenをメモにコピーします。
この中のcloudflared.exe service install ....
の後ろの長いキーが必要になります。
ここでSSHでOpenWRTにログインして以下を実施、
cloudflared tunnel login
するとターミナルにURLが表示されるので、ブラウザでログイン、認証を終わらせて認証ウインドウを閉じてください。するとSSHの端末に
You have successfully logged in.
If you wish to copy your credentials to a server, they have been saved to:
/root/.cloudflared/cert.pem
と出ますので、これをコピーします
cp /root/.cloudflared/cert.pem /etc/cloudflared/
次にブラウザでOpenWRTを開きVPN>CCloudflare Zero Trust Tunnelを開き、
以下の設定にします
Enable:チェックを入れる
Token:さっきのものを貼り付ける
Config file path:そのまま
Certificate of Origin:そのまま
Region:そのまま
Info:そのまま
これでSave &Applyをすることで、cloudflare側と接続されるので、ブラウザ側の操作を再開します。
ブラウザの設定の続きで、プライベートネットワークの以下の設定をします
CIDR:ここは自身のネットワーク(OpenWRT)のCIDR(例:10.0.0.0/24)
説明:適当に
トンネルの保存をすることで設定が完了します。
接続確認は
OpenWRT側は以下
Cloudflareでは
トンネル名のコネクタIDをクリックすることで、ホスト名が表示されれば成功です。
WARP(クライアント側の設定)
ポリシーの設定
クライアント側の設定を行います、ブラウザでcloudflareのzerotrust内の設定を開きWARPクライアントを開きます。
デバイスの登録を開き、accessポリシー「admin」の設定を開き、ルールにメールアドレスやCountryを設定します
spilit Tunnelsの設定
warpはデフォルトでにローカルアドレスは通さない設定なので外します。
設定>WARPクライアント>デバイスの設定>プロファイルの設定>でファルトの・・・を開き設定をクリックします。
下の方のスプリットトンネルを管理をクリック、
右欄から10.0.0.0/8を選択して削除します。
これでクライアントの設定が完了しました。
クライアントのダウンロード
以下より各OSのものをインストールして設定します。
ここ
詳細は省きますが、チームドメインを記載して、Cloudflareにログインすることで、接続するようになります。
別回線等からOpenWRTや他のサーバにローカルIPでつながれば、成功となります。
フレッツ光クロスでWAN6瞬断する場合がある件
自分はまだ経験がないのですが設定しておきました
OpenWrtとフレッツ光クロスでwan6の瞬断が発生する問題と解決
で、実際速いの?
SFPスイッチに繋いだ別の10Gbpsのマシンからベンチしたらこんな感じ。
https://www.speedtest.net/result/c/e95409e9-bdde-4992-8dcc-2bf7000a57af
その他
SFPモジュールの温度を知りたい
(dashbord用のパッケージないもんかね)
10Gbase-TのSFP、低発熱にしないとやけどします・・
opkg update
opkg install ethtool-full
root@OpenWrt:~# ethtool -m eth0 |grep "Module temperature"
Module temperature : 43.62 degrees C / 110.52 degrees F
Module temperature high alarm : Off
Module temperature low alarm : Off
Module temperature high warning : Off
Module temperature low warning : Off
Module temperature high alarm threshold : 80.00 degrees C / 176.00 degrees F
Module temperature low alarm threshold : -10.00 degrees C / 14.00 degrees F
Module temperature high warning threshold : 75.00 degrees C / 167.00 degrees F
Module temperature low warning threshold : -5.00 degrees C / 23.00 degrees F
あとやりたいこと
adblockerとか。アラートとか仕込んでおきたい。
引用元等
cloudflare tunnnelは以下を参考にさせていただきました。
map-eの導入は以下を参考にさていただきました。