Upgrade to Pro
— share decks privately, control downloads, hide ads and more …
Speaker Deck
Sign up for free
Menu
Search
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Features
All features
Private URLs
Password Protection
Custom URLS
Scheduled publishing
Remove Branding
Restrict embedding
Deck Collections
Notes
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Explore
Featured decks
Featured speakers
Programming
Technology
Storyboards
Pricing
Search
Sign in
Sign up for free
おうちネットワーク10G化 ルーター自作編
Search
kashiwa
November 25, 2024
1.9k
0
Share
Embed
Copy iframe code
Copy JS code
Copy link
Start on current slide
おうちネットワーク10G化 ルーター自作編
kashiwa
November 25, 2024
More Decks by kashiwa
See All by kashiwa
なぜ今Cursorを薦めるのか
takak2166
0
43
ktr0731/go-mcpでMCPサーバー作ってみた
takak2166
0
380
AIを駆使して1からプログラム作ってみる2025
takak2166
0
50
おうちネットワーク10G化 宅内LAN配線編
takak2166
0
190
おうちネットワーク10G化 宅内LAN配線編
takak2166
0
400
Enablement Bootcamp for Gopherizing 発表会資料
takak2166
0
120
JANOG STAFFやってみた
takak2166
0
110
Featured
See All Featured
Designing for Timeless Needs
cassininazir
1
480
No one is an island. Learnings from fostering a developers community.
thoeni
21
3.8k
A Guide to Academic Writing Using Generative AI - A Workshop
ks91
PRO
1
470
My Coaching Mixtape
mlcsv
0
320
How Software Deployment tools have changed in the past 20 years
geshan
1
34k
Cheating the UX When There Is Nothing More to Optimize - PixelPioneers
stephaniewalter
287
14k
VelocityConf: Rendering Performance Case Studies
addyosmani
331
25k
Conquering PDFs: document understanding beyond plain text
inesmontani
PRO
4
3.1k
コードの90%をAIが書く世界で何が待っているのか / What awaits us in a world where 90% of the code is written by AI
rkaga
63
46k
Sam Torres - BigQuery for SEOs
techseoconnect
PRO
0
540
Exploring the Power of Turbo Streams & Action Cable | RailsConf2023
kevinliebholz
37
6.6k
Color Theory Basics | Prateek | Gurzu
gurzu
1
470
Transcript
おうちネットワーク10G化 ~ルーター自作編~ Takayuki Kashiwa
現在の自宅ネットワーク構成図 インターネット(au ひかり) HGW (BL3000HM) サーバー (ESXi) (DeskMeet B660) NAS
(QNAP TS-230) PC PC PCとか インターネット(ビッグ ローブ光(光コラボ)) ルーター (作成中) (R86S) ONU L2SW (QSW-2104-2T) 自室の PC 10GbE 1GbE 2.5GbE (実際は5G)
インターネット(au ひかり) HGW (BL3000HM) サーバー (ESXi) (DeskMeet B660) NAS (QNAP
TS-230) PC PC PCとか ルーター (作成中) (R86S) ONU L2SW (QSW-2104-2T) 自室の PC 10GbE 1GbE 2.5GbE (実際は5G) 今日はここの話 現在の自宅ネットワーク構成図 インターネット(ビッグ ローブ光(光コラボ))
ルーター化するミニPC(R86S)について(前回資料から抜粋) • 2.5GbE-T x3, 10G SFP+ x2 搭載している 変態な ミニPC
• CPU:Intel(R) Celeron(R) N5105, Memory: 16GB, Storage: 64GB eMMC(内蔵) • メルカリで3.8万円で購入 • 追加でSFP+モジュール(RJ45)(8000円くらい)を2つ買った
インターネットの接続方式の話 • インターネットの接続方式については「徹底解説v6プラス」が詳しい ◦ Web版は無料で公開されている → https://www.jpix.ad.jp/files/v6plus-ebook.pdf • 各プロバイダによって接続方式が異なる ◦
2024年現在ではIPv4とIPv6のデュアルスタック構成になっていることがほとんど ◦ ざっくりとPPPoE方式とIPoE方式に分かれる ▪ auひかりやその他電力会社系の光回線だと PPPoE方式、フレッツ光や光コラボでは IPoE方式が採用さ れている(らしい) ▪ IPoE方式だとデュアルスタック構成にするための方式でさらに細分化される • MAP-E, DS-Liteなど • 私が契約しているビッグローブ光(光コラボ)のIPv6オプションはIPv6 IPoEのMAP-E方式 なのでルーターを自作する場合この方式に対応させる必要がある
MAP-Eについて • Mapping of Address and Port using Encapsulation •
IPv6 IPoEでIPv4の通信を実現するための方式の一つ • 通常は1回線につき1つのグローバルIPv4アドレスが付与されるが、MAP-EではIPv4ア ドレス枯渇防止のため複数の回線で1つのグローバルIPv4アドレスを共有している ◦ 回線契約ごとにIPv4で使えるポートの範囲が分かれている(IPv4で通信する場合は決められ たポート番号しか使えない ) MAPドメイン (サービス提供者の IPv6ネットワーク ) MAP BR インターネット MAP CE (HGW) MAP CE (HGW) MAP+NAT MAP+NAT
ミニPC(R86S)をルーター化するためにやったこと • Linux OS(Ubuntu24.04)をインストール • IPアドレスの設定 • カーネルパラメータの設定 • IPIP6トンネルの設定(MAP-Eトンネル)
• NAPTの設定 • ルーティングの設定 • DHCPサーバー(LAN側)の設定
Linux OS(Ubuntu24.04)をインストール (よくある手順なので詳細は割愛) • Ubuntu24.04のISOイメージを公式ページからダウンロードしてrufusでUSBメモリ に焼く • R86SにそのUSBを挿して起動してBIOS開いてUSB Boot •
あとはインストーラ―に沿ってインストール
IPアドレスの設定 • 最近のUbuntuだとnetplan使って設定するのが普通?だけどネットワーク周りの設定を systemd-networkdにまとめたかったのでsystemd-networkdにまとめた • WAN側はDHCPv6でIPv6のアドレスが取得できる ◦ この取得できるIPv6アドレスのプレフィックスによってIPv4アドレスと利用できるポート 番号が決まる ▪
IPv6アドレスのプレフィックスとIPv4のプレフィックスの組み合わせはDHCPv6でアドレス取得した状態で https://api.enabler.ne.jp/6a4a89a8639b7546793041643f5da608/get_rules?callback=v6plus を叩くと確認 できる • IPv6プレフィックスの次のセグメント(4桁)がIPv4のサフィックスになる • 例:2001:db8:1234::5678というアドレスが割り当てられていて、2001:db8::/32がプレフィックスの場 合、1234 の部分がサフィックスになる(16進数なので10進数への変換が必要) ◦ http://ipv4.web.fc2.com/map-e.html がIPv6プレフィックスから計算してくれるので便利 • LAN側は好きなように設定(192.168.10.1/24 など)
http://ipv4.web.fc2.com/map-e.html ← 入力するとここに option peeraddr としてBRのアドレスが表示される (本当は実際に入力した例を出したかったけど 自宅のIPアドレスが丸裸になってしまうのでやめた)
• ルーターとして動作させるためにパケットのフォワーディングを有効にする • 以下のファイルを作り、sudo sysctl -p で適用 カーネルパラメータの設定 # /etc/sysctl.d/20-mape.conf
net.ipv4.ip_forward=1 net.ipv6.conf.default.forwarding=1 net.ipv6.conf.all.forwarding=1
IPIP6トンネルの設定 • LocalにCEのIPv6アドレス、RemoteにBRのIPv6アドレスを指定して トンネルを張る • MAP-Eルールで計算したグローバルIPv4アドレスを設定 • MTUは1460に設定 ◦ IPv6のヘッダー長は固定で
40のため • systemd-networkdで設定(設定値は後述)
NAPTの設定 • LAN側の通信をWAN側のIPv4アドレスでSNAT • 使用できるポート番号が決まっているのでそのポート番号でNAPT するようにする • nftablesを使って設定 ◦ jinja2でtemplate化した
▪ https://gist.github.com/takak2166/ed6f54e85cdb65efe80d0114b58e9afe
ルーティングの設定 • IPv4はIPIP6トンネルをデフォルトゲートに設定 • IPv6はDHCPで降ってきたゲートウェイをデフォルトゲートに設定 ◦ PCからSSHするためにHGW(auひかり側)のネットワークにもつながるようにしていた ため、IPv6のデフォルトゲートが HGWを向いていたことに気付かず結構時間溶かした 😇
• systemd-networkdで設定 こっちをデフォゲにする必要がある
DHCPサーバーの設定(LAN側) • LAN側でDHCPでIPアドレスが割り当てられた方が便利(というか普通の 家庭用ルーターには備わっている)なのでDHCPサーバーとしても動作するように 設定 • systemd-networkdで設定
実際の設定(WAN側・LAN側) # /etc/systemd/network/wan.network [Match] Name=enp4s0d1 [Link] RequiredForOnline=yes [Network] IPv6AcceptRA=yes IPForward=ipv6
DHCPPrefixDelegation=yes DHCP=ipv6 Address=<CEのIPv6アドレス> Tunnel=mape-tnl [DHCPv6] DUIDType=link-layer WithoutRA=solicit # /etc/systemd/network/lan.network [Match] Name=enp4s0 [Network] Address=192.168.10.1/24 DHCPPrefixDelegation=yes IPv6SendRA=yes DHCPServer=yes Address=<DHCPで降ってきたIPアドレス> [DHCPServer] ServerAddress=192.168.10.1/24 EmitDNS=yes DNS=1.1.1.1 [IPv6SendRA] EmitDNS=yes [DHCPPrefixDelegation] UplinkInterface=enp4s0d1 SubnetId=0 Announce=yes RouteMetric=257
実際の設定(MAP-Eトンネル) # /etc/systemd/network/mape-tnl.network [Match] Name=mape-tnl [Link] RequiredForOnline=yes [Network] IPForward=ipv4 BindCarrier=enp4s0d1
DefaultRouteOnDevice=yes DHCP=no IPv6AcceptRA=no LinkLocalAddressing=no Address=<MAP-Eルールで算出したIPv4アドレス> [Route] Destination=0.0.0.0/0 # /etc/systemd/network/mape-tnl.netdev [NetDev] Name=mape-tnl Kind=ip6tnl [Tunnel] Mode=ipip6 Local=<CEのIPv6アドレス> Remote=<BRのIPv6アドレス> DiscoverPathMTU=yes EncapsulationLimit=none
接続テストの結果 > ./speedtest -s 14623 Speedtest by Ookla Server: IPA
CyberLab - Bunkyo (id: 14623) ISP: Biglobe Idle Latency: 7.33 ms (jitter: 0.35ms, low: 7.08ms, high: 8.13ms) Download: 2104.84 Mbps (data used: 2.7 GB) 9.21 ms (jitter: 2.03ms, low: 7.67ms, high: 233.00ms) Upload: 2941.57 Mbps (data used: 4.9 GB) 7.60 ms (jitter: 0.70ms, low: 6.84ms, high: 11.66ms) Packet Loss: 0.0% • https://www.speedtest.ne t/ja/apps/cli を使用 • 10G回線のはずなのに 2~3Gbpsしか出てない...
まとめ • R86SというミニPCにLinuxインストールしてIPv6オプション(MAP-E)対応のルー ターを作成した • ちょっと苦戦したけどLinuxの標準的な機能を使って設定できた • なぜかわからないけど通信速度が微妙だった • 今回ほとんど手動で設定を入れたので自動化にチャレンジしたい