特定のMACアドレスに対して固定IPを払い出す場合の設定方法
環境
| Env | Ver |
|---|---|
| RTX830 | Rev.15.02.26 |
手順
- 管理画面に入り管理>保守>コマンドの実行
- 以下の書式でコマンドを流すと設定できる。Nは優先順位
dhcp service server dhcp server rfc2131 compliant on dhcp scope 1 192.168.100.2-192.168.100.191/24 dhcp scope bind 1 <IPアドレス> ethernet <MACアドレス> - ルーターを再起動すると再割り当てされる
上手く再割り当てされない場合
- 次のコマンドを叩く
show status dhcp - 次のコマンドで強制的に割り当てる
dhcp manual release <DHCPリースを解除したいIP> dhcp manual lease <再割り当てしたいIP> ethernet <再割り当てしたいMACアドレス>
備考
dhcp server rfc2131 compliant offにする情報がネット上に目立つが、12.1.5 DHCP 予約アドレスの設定を読む限りリース情報が変に残ることがあり、再割り当てがうまくいかないケースがありそうなので避けた方がよさそう?
参考
生のHTTPメッセージを見たい時に使える方法。devtoolsではフォーマットされたログしか見れないが、生のテキストを見たい時に使える。具体的には以下の画像のような奴だ。
よく忘れるのでメモとして残しておく
確認環境
| Env | Ver |
|---|---|
| Google Chrome | 120.0.6099.225 |
| Microsoft Edge | 120.0.2210.144 |
やり方
chrome://net-internals/にアクセスするとログ収集ができるので、ログを集めたらイベントビューワで見ればよい。なおイベントビューワは外部サイトなので注意。
以前はブラウザ内で完結していて、リアルタイムに見れたはずだが、何故かできなくなっていた。
Edgeの場合はedge://net-internals/でもアクセスできるが、特にこだわりがなければ汎用性の高いchrome://net-internals/でよいと思う。
バーチャルホストを利用することで1IPに対し複数のドメインを紐付けることが出来るが、hostsに書かないとアクセスが出来ないという面倒な問題が発生する。今回はこれを回避するためにhostsの記述無しでバーチャルホストにアクセスする方法を書いておく。
やり方としては単純で、HTTPリクエストのHostヘッダーにバーチャルホストのドメイン名を指定すると、そのバーチャルホストへのリクエストを投げることが出来る。
一例:curl http://127.0.0.1/ -H 'Host: example.com'
IPv6のOCNバーチャルコネクト環境ではwell-known portsが利用出来ずWebサーバーを公開するのに支障がありますが、今回はそれを乗り越えるための手法を紹介します。
自宅サーバーにhttps://service.example.com/のようにポート指定なしのサブドメインでアクセスできるようにするのがゴールです。
構成
自宅サーバーの手前にCDNを挟み、CDNを経由して接続させるようにします。要するに手前にリバプロを生やしておくわけです。
前提
- Google Domainsを利用している
- ルートドメインを保有している
- AWSのアカウントがある
前準備
DNS レコードに次のドメインを作っておく
| 用途 | ドメイン | レコード | データ |
|---|---|---|---|
| CDN 用のドメイン | cdn.example.com | A | サーバーの IP |
| 公開用のドメイン | service.example.com | A | サーバーの IP |
自宅サーバーを公開可能な状態にする
叩き台程度ならserveを使うのが手っ取り早いですが、Node.jsでサーバー立てるのもありだと思います。今回は叩きなのでHTTPにしていますが本番運用するときはHTTPSにしましょう。
以下サンプル
const http = require('http');
const port = 12345;
const server = http.createServer((req, res) => {
res.writeHead(200, { 'Content-Type': 'text/plain' });
res.end('Hello world!');
console.log(req.headers.host, req.socket.remoteAddress);
});
server.listen(port, () => {
console.log(`Running at http://localhost:${port}`);
});
手順
- CloudFrontを開く
- 「ディストリビューションを作成」
- 「オリジンドメイン」に
cdn.example.comを設定 - 「プロトコル」を選ぶ
cdn.example.comの「ポート」を設定する- 設定までスクロール
- 「代替ドメイン名 (CNAME) - オプション」で「項目を追加」し
service.example.comを入力 - 「カスタムSSL証明書 - オプション」で「証明書をリクエスト」
- 「パブリック証明書をリクエスト」
- 「完全修飾ドメイン名」に
service.example.comを入力し「リクエスト」 - 「証明書を表示」
- DNSレコードに「CNAME名」で「CNAME値」を追加
- 「保留中の検証」が終わるのを待つ
- 「カスタムSSL証明書 - オプション」で作成した「ACM証明書」を選択
- 「ディストリビューションを作成」
service.example.comのDNSレコードをCNAMEにし、データを「ディストリビューションドメイン名」に変更https://service.example.com/にアクセスできればOK
参考資料
トラブルシュート
ディストリビューションを削除したい
- ディストリビューションの一覧で消したいのにチェック入れて無効化
- しばらく待つ
- 消したいのにチェック入れて削除
後書き
副次的効果ですがCDN挟んでキャッシュされてるお陰で連続アクセスしてもサーバーまでリクエスト来ないので感動しました。
CloudFrontには他にも様々な機能があるみたいなので活用できれば便利そうです。
🚀 やりたいこと
- ApexドメインのDNSレコードで次の振り分けを行いたい
- AレコードをGitHub Pagesへ
- MXレコードをさくらのレンタルサーバーにあるメールボックスへ
⚗️ ハマったところ
以下のようにMXレコードをIPで指定するとメールが受信できないケースがありました具体的にはさくらのメールボックスやGMailから投げると届くのですが、WantedlyやMeetyからの自動配信メールが届かない状態でした原因はDNSレコードの状態がRFC 1035に準拠しない事と思われます
| ホスト | レコードタイプ | データ |
|---|---|---|
| lycolia.info | A | 185.199.108.153 185.199.109.153 185.199.110.153 185.199.111.153 |
| lycolia.info | MX | 10 163.43.80.45. |
🛠️ 解決方法
Aレコードにメール用のサブドメインを追加し、これにIPを設定し、MXレコードからはそのドメインを参照することで上手くいくようになりますサブドメインはmail.である必要はなく、別になんでもいいみたいですWebサーバーとメールサーバーが同じならApexドメインでも行けるっぽい
| ホスト | レコードタイプ | データ |
|---|---|---|
| lycolia.info | A | 185.199.108.153 185.199.109.153 185.199.110.153 185.199.111.153 |
| mail.lycolia.info | A | 163.43.80.45 |
| lycolia.info | MX | 10 mail.lycolia.info. |
📖 参考情報
- ウェブとメールを別々のサーバで運営したい?・・・それ、ゾーン設定で出来ます! | さくらのナレッジ
- IPで指定すると上手く行かない的なことが書いてあります
- ググってたら偶々公式が引っかかったのですが、公式にこういう情報があるとありがてぇですね
- RFC 1035
- MXレコードには16bit整数で表現される優先度とドメイン名を定義する事、優先度は低い程優先されるということが書かれています

