基盤:ネームサーバを引っ越したいと思います。
開発:え、また?なぜ。
基盤:一つにはネームサーバのアドレスを固定するため、一つにはそれをネームサーバに専用化したいため、一つにはAmazon Linuxを実用に使ってみたいためです。
基盤:実はライトセールの使い方を勘違いして、ネームサーバには固定アドレス(パブリックな静的アドレス)を与えていなかったのです。今のネームサーバのインスタンスのネットワーキングはこうなっています。
基盤:この 3. ではじまるアドレスは、このインスタンスを作成した時に割り振られたもので、良いアドレスだと思ってこれにしました。ですが「インスタンス生成時に割り振られたアドレスを静的にする」というオプションは、ライトセールには無いのです。勘違いしてしまった理由の一つは、このインスタンスを管理する画面と、全インスタンスを管理するための画面が、なまじ型式が統一されているためです。全体の管理画面(ホーム)はこうなっています。
基盤:で、このネットワーキングを見るとこういう様子。
経理:アタッチされてないIPアドレスって、余計に課金されるんですよね。
基盤:気になるのは「DNSゾーンの作成」というところで、ここでAWSが提供するネームサーバも作れるわけです。これは Amazon Route 53 などを使います。で、ここで作ったDNSゾーンをそのネームサーバに管理委託するみたいな感じになるかと思います。ですが、うちでやりたいのは多数のトップレベルドメインの管理ですし、そもそもネームサーバで楽しむのが目的の一つですから、ネームサーバは自前で作るという道しか無いと思います。
基盤:で、現在のネームサーバホストは Ubuntuですが、沢山インスタンスのアドレスを試作する過程で ns0f という一時的な名前を付けました。ですがこの呼称は変更できないようです。内部的なインスタンス名とは言え、イマイチしっくりしません。一方、ns1 という名前で作ったのはたまたま Amazon Linux でした。これは試用してみて、機能性能的に問題が無いことを確認しています。デフォで NFS サーバがインストールされてるとか、サーバとして利用するには望ましい傾向のパッケージなのかも知れません。なんといっても Amazon Linux というくらいですから、アマゾンによる Long Time Support は当然期待します。Linuxカーネルの版はLinux/4.14.181-108.257.amzn1.x86_64、2020年5月27日付、一ヶ月ちょっと前です。
基盤:ということで、この ns1 という名前の Amazon Linux のインスタンスを今後我社のネームサーバとしたいと思います。
基盤:それで、良いアドレスにあたらないかと、静的IPの生成を試してみます。
54.168.5.142
18.176.229.115
54.249.17.107
18.176.229.115
54.249.17.107
基盤:えーと、削除して生成すると、同じアドレスが巡ってきますね(^-^)。17.107 というのはなかなか悪くないので、候補として残します。
13.113.33.216
開発:おっと、これはなかなか語呂が良いですね。これも候補に
3.114.178.117
基盤:これもなかなか。3. だし。
52.69.148.36
18.178.87.103
基盤:これもなんだか良いですね。次。
開発:いたずらをすると英語で叱られますよ、ってやつですかw
基盤:ライトセールでは固定アドレスは 5つまでな、っていう制約ですね。他のアカウントを使ってサイコロ振りを続けますか?w 今の残っている候補はコレ。
基盤:わたしの好感度的にはこうですかね。
3.114.178.117 2位
13.113.33.216 1位
18.178.87.103 4位
54.249.17.107 3位
54.238.125.26(運用中のdelegate.orgに使用中)
開発:使用中のアドレスが一番つまらないですねw
基盤:でも運用中だから外せない。動いている間は保持してくれるとかすると良いのですが。
開発:ライトセールもこのへん、もっと楽しくアドレスを選べるUIにしてほしいものですね。
基盤:では4位を落として続けます。
54.199.42.158
54.178.28.243
54.199.42.158
54.178.28.243
開発:やっぱり、再利用されて回ってきてしまいますね。
基盤:3位も落として続けます。
54.178.63.130
54.249.17.107
基盤:復活してしまいましたw
54.95.143.38
18.181.38.61
基盤:おっとこれはちょっと良いかも。ノミネート。
54.194.117.232
52.69.18.91
開発:初めて出ました、全部2桁。
基盤:ということで現在の候補と私から見た好感度。
18.181.38.61 1位
13.113.33.216 2位
52.69.18.91 3位
3.114.178.117 4位
54.238.125.26 (使用中)
開発:そうですね。全部で9桁なのも高評価。18.181.38.61。これにしましょう。
基盤:こういうところがIPv4 の楽しさですね。
社長:昼食はどうしますかね。
基盤:飲んで食べて昼寝するとどうしても3時間くらいかかるので、今日はパスします。
開発:私もパス。
社長:では、久しぶりにカップヌードルシーフード味にしますか…
* * *
基盤:仕事の合間にお湯を注ぐと、気がついたら10分て普通ですよね。ずずっ。
開発:タイムリーに食したのは久しぶりです。ずずっ。
社長:まあ、カップヌードルにコシという概念はないですけどね。ぺろぺろになるのもまた良し。ずずっ。
基盤:でも、完全にスープが麺に吸収されて一体のゲル状にまでなるとどうも。ずず。
開発:あれも一応、スープまで完食っていうことになるんでしょうね。ず。
基盤:減塩とかの話じゃないですよね。ず。
社長:あー、ビールが飲みたいなぁ。買い置き常温の黒ラベルはあるんですが。ずず。
開発:冬場は常温も悪くないですけどね。今だと泡にしかならないし。ず。
基盤:ずー。。完食。
社長:そういえば昨日はあの謎の定食屋さんでしたが、タンメンに野菜をてんこ盛りに載せてって言ったら、本当に死ぬほど載ってきました。やっぱタンメンに載っている野菜って美味しいですよね。麺も悪くはなくて。食べられませんでしたけど。
基盤:今度から麺は1/16玉くらいにしてもらうとよいですね。
* * *
基盤:またあの咳き込みおばさんが… 屋外まで咳き込みに出てるのかな?
基盤:それはそうと、現状当社の保有する固定アドレスとVMはこういう事になっています。
基盤:今運用に使われているのはWebサーバ用とネームサーバ用。他の3台は評価用なのでいつでも捨てられます。ns0eは手がすべって0.5GBメモリ$3.5プランにしてしまったものですが、試しに使った限りでは何も問題がありませんでした。この点は、全く使い物にならなかった Azure の 0.5GB とはえらい違いです。
開発:揮発性の仕事の内部での並列処理用に飼うのは良いかもですね。8台並列にしても$28/月。
社長:いつか負荷分散が必要になるような状況になると良いですねえ。
基盤:アマゾン提供のロードバランサーはあるのですが、それって自分たちで作ったほうが面白いと思います。Linux でルータ専用機を作って NAT / NAPT したいと思います。
開発:ライトセールでは一台に複数のIPアドレスは振れないんですか。そうしないと面白みが半減ですね。その点はちょっと残念。
基盤:そのあたり用にだけ EC2 を一台飼うという方法はあるかと思います。ネットワーク性能次第では、高速な出入り口を EC2 に付けて、処理はリージョン内のライトセールに投げるという選択はありかと。
基盤:さてそれで。お試しに作った Amazon Linux にはたまたま ns1 という名前を付けたので、これをそのまま新ネームサーバ(プライマリw)として使いたいと思います。この他に、AmazonLinux間での連携を試したいので、もう一台AmazonLinux。せっかくなのでBSD系も一台。せっかくなのでWindowsも一台。Amazon 2、Ubuntu 1、BSD 1、 Windows 1 という構成になります。
社長:いや、別に5台に収めることにこだわらなくても…
基盤:そうですか… では、一日20円の課金ですし、1週間くらいのスコープでやります。
基盤:今後の作業の流れです。
- 現行(旧)NS(Ubuntu)の内容を新NS(AmazonLinux)にごっそり移して稼働させる
- 新NSには上記のIPアドレス18.181.38.61をふる
- そのアドレスをns1.its-more.jp と ns1.delegate.org として xso と nso に登録
- 現有のドメイン名のプライマリNSをごっそり新NSに向ける
- 旧NSへの問い合わせが静まったらそのアドレスを廃止する
基盤:今回の移行では、ネームサーバのコンテツ自体は共通なので、5.はそれほど待たずにやてしまって良いとは思います。
開発:まあ、名誉セカンダリとしてしばらく残留でも。
社長:了解。
基盤:では作業開始します。
基盤:ああ、まず静的アドレスふっちゃいますかね。
基盤:このインスタンスの種別を示す変なアイコン、何かと思ってたんですが、よくみると宅配アマゾンの段ボール箱のようですw。これ、生きているインスタンスのアドレスすげ替えたら何が起こるんでしょう…
開発:もともと自分のプライベースアドレスしか知らないから、マシン自体は何も気づかなそうですね。
基盤:アタッチNo1。
基盤:でインスタンスを見る。
基盤:簡単過ぎる… これ以上に簡単にする必要性を感じませんね。Azureの10倍くらい簡単です。
基盤:さてそれで、旧アドレス向けに開いたターミナルは固まっております。
基盤:そして、インスタンス概要にあるコンソールのアイコンを押します。
基盤:ぽちっと。
開発:簡単過ぎる。
基盤:ただし思うに、このブラウザ式コンソールはアマゾンのHTTPサーバを経由してインスタンスにつながっているわけですから、インスタンスのプライベートアドレスのほうにSSHしてやれば、パブリックアドレスを変えられても、コンソールも切断もされず作業を継続できるのになとは思います。
基盤:さてそれでは、この ec2-user のままでは当社的には色々不便ですから、新しいユーザを追加します。sudo adduser xxx。あ、RedHat はこの時にパスワードを聞いてくれないのか… sudo passwd xxx。su xxx。ls -lat。シンプルな .bashrcがあるのみです。とりあえず ec2-user から .ssh をコピー。ああ、sudo ができない。ec2-user に戻って sudo visudo。ec2-user の .ssh をコピーして chown xxx。ナマ端末からxxxにSSHでログイン。OKです。
開発:デフォルトのユーザ名以外にログインできないのがブラウザ式コンソールの残念なところですね。まあ、昨日検討したような方法でユーザ名をマッピングしちゃえばいいんでしょうけど。
社長:デフォルトユーザでログインされて、1秒以内にキーボード入力が無かったら、指定のユーザにsuしちゃうとかでどうですかね。
基盤:おっと、タイムゾーンの設定がUbuntuみたいにシンボリックリンクでは無いですね。あーでも、/usr/share/zoneinfo/Asia/Tokyo を /etc/localtime にシンボリックしてOK。受け入れ準備完了です。
基盤:で、引っ越しスクリプト書いてGo!。まあ20分くらいですかね。しまった。tar に z つけるの忘れた‥ どうしましょうね?こういう時にrsyncだったら。
開発:っと言う間にもう6割くらい終えてますね。待ちましょう。
基盤:まってる間に crotab -e を味見。… 何も聞かずに黙ってvi。よしよし。おー、空っぽだ。素晴らしいというか潔いというか。
開発:crontab の意味をわからずに crontab をいじっちゃいけないですよね。man しろと。
基盤:おや、PATHの先頭に . がw。さすがに私は最後に入れますけどね。
社長:当社のテイストに極めてよくマッチしております。
開発:Ubuntuよりはうちの流儀にあってますかね。
基盤:というか、AmazonLinux のイメージって、そのままローカルのVMサーバとの間でホイホイ移動できるでしたっけ。Hyper/V で AmazonLinux ってアリかもですね。
社長:そういえば、MacOS版のHyper/Vだと豪語していた Parallelsはどうなりましたかね。
基盤:あれは、iMacでやってみますかね。あるいは、退役するこのMacMiniの余生をつぎ込むか… あ、コピー終わりました。
開発:20分ちょっとでしたね。
基盤:ユーザ用にコピーするのはシェルのalias集。source ...。うーむ楽ちん。
開発:alias をログイン元で一括管理できるんでしたっけ?
社長:少くとも私の作ったリモートshellでは出来ました。
基盤:dgbind を chown, chmod。でおももろに sh httpd 。。。OKです。全サーバ起動。OKです。ブラウザから http://18.181.38.61 … OKです。ssh ログイン再確認、OKです。
開発:あれ?Ubuntu 18の旧NSに比べると、SSHログインがサクッときますね。
基盤:なんででしょうね?あっちはもう仕事してるからとか?
基盤:で、crontab -e でリブート時のサーバー起動スクリプトを追加。sudo reboot。さて、このリブートの遅いのがEWSの不満な点なわけですが… お、でも40秒弱で立ち上がりましたね。ふーむ。
開発:おや?リブート時に自動的にDeleGate系サーバ起動してないですね。@reboot がないとか?
基盤:man 5 crontab。ありますね。mail。。無い(笑)。cat /var/spool/mail/xxx … ああ、スクリプトが間違ってました。でも Ubuntu では見逃してくれたんですが… とりあえず reboot。再度ログインして ps xf。サーバ類起動確認OK。運用開始準備完了です。
開発:スクリプトの間違いとは?
基盤:crond から起動される時の PATH に . が入ってないんですね。手動での起動とcronでの自動起動は共通にしたいわけですが。だから cd $HOME 後に、source .bashrc じゃなくて、source ./.bashrc とする必要があった。
開発:なるほど。正しい。
社長:/var/spool/mail/mbox に cron のエラーが入るとか。私はひじょーに、AmazonLinux が気に入りました。いっぷくしましょう。
* * *
基盤:さてそれではこの ns1 を its-more.jp と delegate.org に登録します。
開発:ゴッドブレス 18.181.38.61。
基盤:とその前に、dig @18.181.38.61 satoxits.com … あれ、返事がない。
開発:ファイアウォール開けてないですね。
基盤:そうか。なんで HTTP は通ったのかな。… ああ、デフォルトで 22 と 80 が開いてるんですね。微妙なデフォルト設定… では 53 も通します。あと443と Ping もかな。うーむお手軽。Azureの10倍以上は簡単ですね。
開発:惜しいのはその「作成」の位置だよね。なんで右にアラインしてるんですかね。左寄せいにしてボタン形状にすれば良いのに。そもそもユーザ目線で言えば「作成」じゃなくて「追加」だよね。
基盤:で再度会社からdig @18.181.38.61 ... OK。ping … OK。うーん、なぜか Ubuntu より若干速いです。
開発:まだトラフィックがゼロだからですかね??
基盤:では nso にて ns1.delegate.org を登録。18.181.38.61。
開発:この 18181 の部分は、すぐに覚えられますね。
基盤:しつこいなー。change じゃなくて新規の追加なんだから遅延なんてないでしょうに。オンデマンドで検索じゃないんですか?
基盤:まじ?自分の中に反映されるのに時間がかかるとか?リロード。
基盤:よかった。digでも確認。OK。
基盤:しかしこの情報を見るかぎり、そのレコードがいつ更新されたかという情報は無いですね。そうなると、古いキャッシュで上書きされても不思議ではない。
社長:確かに。位置レコードごとのタイムスタンプは無かった気もします。
開発:だとすると、DNSって悲しいプロトコルですね。
基盤:次に xso …
基盤:またこれか…
社長:今日は時間もあるし、数分待ってみましょうかw いっぷくしましょう。
社長:大家さんがくれた大根のまるかじり、気分もスキッとするし、とても良いです。
開発:そういえばスーパーに行けば桃が売ってるでしょうね。
社長:桃のまるかじりから始まりましたからね。あの高貴な香りを味わいたい。でももう高嶺の花的なイメージですが。
社長:スーパーまで歩いてけるところも探したんですけどね。ドラッグストアでもいいかということで、近くにいい感じにさびれかけた飲食店が多いここになったわけですが。
基盤:まだ回ってますが。そういうアプリなんですかね。
開発:JavaScriptでしょうね。なんか既存のセッションに邪魔されてるんだと思うんですが。5種のブラウザが動いていてタブが何十もあるからどこにあるのやら。
社長:タブの検索できますよね。というかタスクの検索。
基盤:これかな?プロセスをkill!あ、繋がりました。
開発:さすがに複数並列セッションを禁じてるわけでも無いようですから、正常に活動も終了もしてない?セッションがあると固まるって感じですかね。
社長:セッションのタイムアウトについてはAWSなんかもかなり工夫している気配がありますから、簡単な問題では無いんでしょうね。
基盤:しかし、ネットワーク業界の会社のサーバなんですけどねぇ…
基盤:でDNSレコードの設定… あれれ?ns.its-more.jp すら無い。なんだコリア。
開発:ああ、それはレンタルサーバ用のDNSの方へ行って下さいってやつですよ。
基盤:ぐあー紛らわしい。使われてないDNSサーバならそうメッセージ出してほしいですね。ワンストップサービスで無くてもよいんで。なんかもう間違ってここに Gmail の MX を必死に登録しちゃったらしくて自分が可愛そうになります。これのせいで G Suites と契約する時に手間取ってしまったんですよ。…じゃま、気をとりなおして。レンタルサーバにログインして?。これか、ドメイン。DNS編集マークらしげなアイコンをクリック。おー、20件以上レコードがありますね。この TXT レコードの意味に興味を持ちます。
開発:まあいずれ全部サーバ類を引き上げるとしても、このDNSレコードとレンタルサーバだけは残すんでしょうね。
社長:いちおう、創業の地みたいな。
基盤:では、ns1.its-more.jp A 18.181. ... 忘れた。18.181.38.61 追加します。TTL 600 は NS 用アドレスとしてはちょっと短いですかね。まあよい。確認する。追加する。
開発:まあ「!」を付けるほどの事かなとは思いますが。
社長:いや、プロ相手なら別として、これくらいのほうが親身な感じで良いのでは。あとは失敗した時辛い時にも同じ調子で世話をしてくれるかです。
開発:というかこの会社のシステムのツギハギ感なんとかならないですかね?4世代住宅みたいな。
基盤:dig ns1.its-more.jp 確認。OK。dig @ns1.its-more.jp satoxits.com。OK。あとは、約80個のドメインのNSレコードをまとめて変えて終了です。
基盤:それでちょっと、DNSサーバの応答時間に興味を持ったので調べました。単純にうちからの pingですが。xso は普通に 6ms で帰りますが、nso は worldnic.com で、250ms も掛かるんです!AWS Tokyoからやっても同様です。日本からのアクセスをメインにする .jp ドメインのネームサーバとしては、あり得ないと思います。
開発:そりゃまあキャッシュもしたくなるわなって応答ぶりですね。
社長:まああそこはほぼ、動態保存博物館として使うだけです。
* * *
基盤:さて仕上げは、各ドメインのNSレコードの変更です。がその前にちょっと。さっき登録したばかりでまだどこにもアナウンスしてない ns1.delegate.org と ns1.its-more.jp ですが、このサーバの HTTPに対してすでに googlebot.com とかからアクセスがあります。どうやって検知したんでしょうね?
開発:アドレスで来ているのかな。
基盤:荒らしロボットは、存在しないパス名を探って来たりワンギリなんでわかるのですが、さすがに googlebot とかは普通に / にアクセスしてきています。
開発:この記事へのクロールとの時間関係を見ればわかるかも知れませんね。
基盤:えーと、googlebot はこの記事(p=9820)に 17:22 と 17:28 に来ていますね。
基盤:xso のレンタルサーバはIPアドレスで記録していますが、逆引きするとこうです。
42.68.249.66.in-addr.arpa. 300 IN PTR crawl-66-249-68-42.googlebot.com.
40.68.249.66.in-addr.arpa. 300 IN PTR crawl-66-249-68-40.googlebot.com.
基盤:一方で、ns1 の方へのアクセスは 17:32, 33 となっています。
基盤:残念ながら Referer 情報は "" なので、どこを見て来たのは不明なのですが、意味深な時間関係と思われます。
開発:アンカーは付けてないけど、http://18.181.38.61っていう文字列があるから、それを拾ったんですかね。
社長:まあこういう事を追跡するために、アクセス時刻とクライアントアドレスを暗号化した文字列を埋め込んだURLを生成する機能をDeleGateにも付けてあるわけですよ。
開発:ですがここは Apache で WordPress のページですからねえ。まあでも、普通に JavaScript でそういうURL文字列を生成すれば、同じ事を簡単にできるんじゃないですか?
社長:そうですか・・・ じゃあやってみて下さい。面白そうだし。
基盤:そろそろ夕方で、あの咳き込みがはじまるんじゃないかと不安です。
経理:冷房費節減のため、窓は開放することにしています。
開発:ノイズキャンセラー作ると良いかもですね。
開発:うーん、クライアントサイドの JavaScript になっちゃうと、それをクライアントが解釈して実行してくれるかという問題はありますね。あくまでもページの中のアンカーに静的に存在したように見えるURL文字列で無いといけない。となると結局SSI的なもの。うーん、埋め込み HTML に <!--#echo ... > とか書いても <?php ... ?> とか書いても素通しですね。
社長:それは確か、functions.php というファイルに関数を定義して、ショートカットで呼び出すのだというのを4月に読みかじりましたよ。
開発:結局 PHP 触るのかあ… まあ、もう CSS も食らっちゃたし皿までですかね… find … うちの functions.php ってこれですかね。
~/public_html/its-more.jp/ja_jp/wp-content/themes/twentyseventeen/functions.php
開発:で、ここになんか関数を定義して、ショートカットの名前を定義すると。
function myHello(){ return "Hello World!"; }
add_shortcode('myHello','myHello);
開発:でこれをショートコードブロックで参照すると。
開発:これでどうですかね。ぽちっ。
開発:ひーっ!
開発:とりあえず functions.php を元に戻してというか、追加分をコメントアウト。リロード。回復。ほっ。で何が行けないって言うですかね。function の宣言は問題無さそうだし。ん?add_shortcut の呼び出しの引数のクォートが閉じてませんでした。ではこれを閉じて。再度ショートコードで参照…
Hello World!
開発:やれやれ。よかった。どういうふうに埋め込まれてるのかな?
開発:なるほど。生成されたという痕跡は無いと。
社長:なるほど、よさげな感じじゃないですが。ていうか、SSI の echo の互換ショートカットとかって無いんですかね?
開発:というか、普通の本文中とか、埋め込みHTML中で呼び出せないと不便ですね。
こんなふうなことをWikiの記法みたいに、通常の文章やHTMLの中で書きたいわけですが… Hello World!
社長:ということは、ショートコードのブロックというのは、埋め込みHTMLブロックにショートコードの識別機能を加えたものみたいですね。
開発:なんというか、コンピュータ屋には理解しがたい世界です。
社長:まあ、使えればそれでいいんじゃないですかね。それでクライアントのアドレスを取る方法は?
開発:PHP client address で検索… こういう感じの模様。
$_SERVER['REMOTE_ADDR'];
開発:ということは、こんな風に functions.php に書いて、こんな風に呼び出すと。
p>
社長:ずばりでした。
開発:なるほど、そういうことなのか。ヤバい、面白くなって来てしまいました。これでインラインのCSSとかJavaScriptとか生成すると、やりたい放題というわけですね。
基盤:それがWordPressのプラグインというやつなんですね。
開発:で、 PHP のマニュアルはどこにあるんじゃろ… ああ、これですね。
開発:で、時間はというと…
基盤:5.1.0 より前は何を使ってたんでしょうね?
開発:さあ。リクエストのDateとか?
開発:えーと、PHPでの文字列の結合は '.' でやりますと… 作りたかったのはこういう感じのものですね。
社長:そういうことですね… といか、いわゆるウェブ広告っていうのはこういう仕組みに作られてるんでしょうね。これをインラインのイメージがフレームにすると表示回数カウンターになると。
基盤:ネームサーバのほうのログにも、上のとおり記録されてます。うわっと。googlebot がこのページからたったいま、ロガーのページに飛んで来たと記録されました。
開発:この 54.238.125.26 っていうのは… リバースプロキシ作戦にはまってますね。
基盤:ということで、準備も出来てますし、NSの一斉移動、決行しましょう。
社長:いや、今日はどうしても外に飲みに行きたいのですが、閉まる時間が近づいてきました。帰ってきてからか、明日にしましょう。
-- 2020-0704 SatoxITS
(2020-0707 touch x2)