- 投稿日:
R86S U1を買ってOpenWrtをインストールしてから今までずっとSPF+ポートが認識されていなかったので認識可能にした。
確認環境
- R86S U1
- OpenWrt 24.10.0
前提条件
- インターネット環境があること
手順
- 認識されているかどうか確認し、何も出てこなければ次のステップへ
dmesg | grep mlx4
- ドライバをインストール
opkg install kmod-mlx4-core
- 再び認識されているかどうかを確認する
dmesg | grep mlx4
なぜこれをしようと思ったか?
最初はeth0, eth1との排他制御かと考えていたが、RJ45とSPF+でNICが分離している構造上ありえないので、有効化できるはずだと思ったためやってみた。ポートはあればあるほど都合がいいし、RJ45が使えればSPF+に対応してない機器もつなげて便利なので。
有効化したSPF+ポートをLANに繋ぐ方法
機材不足で未検証だが、基本的にはOpenWrtでR86S U1のeth2ポートをLANに繋ぐ方法でLANに繋ぐものが出来ると思う。
参考までに有効化したSPF+ポートはeth3, eth4として認識されていることを確認している。これはdmesg | grep mlx4
すると分かる。
- 投稿日:
本記事はここ昨今のOpenWrtセットアップシリーズの続きである。
OCNバーチャルコネクトのIPoEでIPv4 over IPv6のMAP-E環境であれば理論上IPv6ポートは全部使えるので、そんならポート指定なしでサーバーを建てられるのでは?というのでやってみた。
確認環境
環境 | 内容 |
---|---|
ISP | OCN光 |
ISP契約 | OCN 光 with フレッツ マンション・スーパーハイスピード 隼・プラン1・西日本 |
ISP接続方式 | OCNバーチャルコネクト(IPoE, MAP-E) |
RouterOS | OpenWrt 24.10.0 |
ServerOS | Ubuntu 24.04.3 LTS |
HTTPD | nginx 1.26.1 |
ドメインレジストラ | Value Domain |
前提条件
IPv4環境下でのHTTPSアクセスが可能で、かつ以下のセットアップが終わっているものとする。
今回の要件
ルーターのファイアウォールでサーバーマシンのみ穴をあけ、それを塞ぐ。つまりNATの再現を行うことで、関係ない端末が攻撃されないようにする。
やり方
サーバーとDNSの設定
- nginxの設定を開き
listen [::]:443
を追加して再起動sudo service nginx restart
- サーバーマシンのIPv6を控える
ip -6 addr | grep 'global dynamic' | perl -ale '$F[1] =~ /^([^\/]+)/; print $1;'
- Value DomainのDNS設定を開きAAAAレコードに、先ほど控えたIPv6アドレスを登録する
ルーターのファイアウォールに穴をあける
- LuCIに入りNetwork→Firewall→Traffic Rulesを開く
Addボタンを押し、次の要領で入力して保存
General Settings項目 値 Name 適当につける Protocol TCP│UDP Source zone wan Destination zone lan Destination address さっき控えたサーバーのv6IPアドレス Destination port 開けたいポートを半角スペース区切りで入れる Advanced Settings
項目 値 Restrict to address family IPv6 only 穴をあけたIP以外が外部から疎通しないことを確認
- 穴をあけたIPが外部から疎通することを確認
備考
OCN光のIPoE(MAP-E)方式のIPはv4, v6ともに基本的に変動しない
結論から言うと引っ越しでもしない限り、v4が固定なのは知っていたが、v6も固定らしい。
v6のアドレスが変わる気配がないので、OCNのテクニカルサポートに聞いた結果、PPPoEは変動IPv4でルーター再起動時にIPが変わるが、IPoEであればIPv4, IPv6ともに半固定で通常は変わらないとのことだった。
つまりVLANやip6tablesがなくてもサーバーを公開できると言う事でOCN様々と言う事である。
IPv4アクセスをどうするか?
現状は2案検討している。
- どっかにペラのページを置いておき、「IPv6でアクセスしてください」みたいなお知らせページにしておく
- SNSなどのOGP対策で、簡単なプロキシを組んでおき、OGPだけ出るようにしておくのが無難に感じる。
2のケースだとレンサバにv6側サイトのOGP取得用のCGIを置いておくとか、v6側サイト更新時にOGP付きのペラのHTMLを置いておくなどが検討できると思う。
Cloudflare Tunnelを使わない理由
Cloudflare Tunnelを使えば確かにこんなことはしなくて済むが、次の理由で使っていない。
一つは、オンプレなのに外部サービスに頼りたくない思いがあること、もう一つはCloudflareでドメイン管理する必要性があるはずだが、Cloudflareでドメイン管理すると今使っているメールサーバーのSPFレコードが正しく登録できない問題があることだ。
関連記事
- 投稿日:
OCNバーチャルコネクトはIPv6を使う限り全ポート使えるはずなので、これを利用してサーバーを立てる。
確認環境
- OpenWrt 24.10.0
- OCNバーチャルコネクト
- Windows 11 Pro 24H2
- Ubuntu 22.04.5 LTS
- nginx 1.26.1
手順
ルーター側だけでなくサーバー側も対応が必要。ファイアーウォールの穴をあけていても、IPv6でlistenしてないと受けられない。
ここでは一旦80番ポートを開けるものとして進める。
ルーター側の設定
設定ファイルを編集する方法
vi /etc/config/firewall
で以下の行を追加config rule option name 'Allow-Server-IPv6' option src 'wan' option dest 'lan' option proto 'tcp udp' option dest_port '80' option family 'ipv6' option target 'ACCEPT'
service firewall restart
でfirewallを再起動する
LuCIでやる方法
- Network→Firewall→Traffic Rules
Addから次の要領でルールを追加
General Settings項目 値 Name 適当な名前 Protcol TCPとUDPにチェック Source zone wan Destination zone lan Destination port 開けるポートをスペース区切り Advanced Settings
項目 値 Restrict to address family IPv6 only 保存してSave & Apply
サーバー側の設定
ufwやWindowsファイアーウォールの穴は開いているものとする。IPv6向けに穴が開いている必要があるが、通常、ufw add
やWindows ファイアーウォールの追加では勝手にv6の穴が開くはずなので意図的に塞がない限り追加時に開いていると思われる。
- nginxの設定を開き
listen [::]:80
を追加する - 外部から疎通確認して通ればOK
備考
疎通検証に使える簡易サーバー
PHP
php -S "[::]:80"
でIPv6向けの簡易サーバーをサクッと立てられるので疎通検証をするときに便利。
Node.js
http-serverだとhttp-server -p 80 -a "[::]"
でいける。serveは未対応っぽい。
疎通確認に使えるcurl例
IPv6はURL形式が特殊なのでアドレス部分を[]
で囲んだ書式で投げる。これはブラウザで確認する場合でも変わらない。
例:
curl -v "http://[aaaa:bbbb:cccc:dddd:eeee:ffff:gggg:hhhh]:80/"
複数ポートの開き方
option dest_port
に値を半角スペース区切りで追加すればよい。
例:
option dest_port '80 443 8080'
連番で開ける場合は公式ドキュメントによると、'1024:65535'
のような書式にすれば、連番で開けられるようだ。
例:
option dest_port '8000:8999'
特定端末向けだけにポートを開けたい場合どうするか(未解決)
設定にoption dest_ip
を追加し、これで制御できると思うがIPv6が変わる特性上、基本的に難しいと思う。勿論、端末側でIPの変更を検知しOpenWrtの設定を書き換えるバッチを組むなどは出来ると思うが、ややこしい。
VLANを使って隔離するとかできればよいのかもしれないが、具体案は検討できていない。
- 投稿日:
基本的な考え方としてはWindowsマシンをWiFiのAPにした時と同じと思われる。ゲートウェイのDNSを参照するのでhostsを書き換えると成立する。
現状IPv6で行うのは現実的ではなさそうだ。
IPv6ではやる意味自体がないので本記事はIPv4向けだ。
確認環境
- OpenWrt 24.10.0
手順
SSHでやる方法
- hostsを開いてIPとドメインを紐づける
vi /etc/hosts
- DNSを再起動する
service dnsmasq restart
LuCIでやる方法
IPv6ではやる意味がない
IPv6だと外部DNSに登録したGUAとドメインの紐づけを利用してLAN内のアクセスが出来るためやる必要性がない。IPv6ではGUAを打っても、相手がLANの中にいれば外に出ずに、そのままつながる。これはtracertを打てば分かる。