名前解決してセッションマネージャが使えるようにVyOSのhost_name.pyを編集しました
2021/07/17
目次
発生したエラー
セッションマネージャからこんなエラーが出力されました。
1 2 |
----------ERROR------- Setting up data channel with id yamashita-0b68620887be0dea1 failed: failed to create websocket for datachannel with error: CreateDataChannel failed with no output or error: createDataChannel request failed: failed to make http client call: Post "https://ssmmessages.ap-northeast-1.amazonaws.com/v1/data-channel/yamashita-0b68620887be0dea1": dial tcp: lookup ssmmessages.ap-northeast-1.amazonaws.com on [::1]:53: read udp [::1]:55130->[::1]:53: read: connection refused |
原因
EC2 VyOSで/etc/resolv.confを設定しましたで名前解決できるようにしました。
SSMエージェントをインストール時だけでいいと思ってたのですが、よくよく考えるとssm.ap-northeast-1.amazonaws.comに名前解決しないとならないんでした。
調査
1 2 3 4 |
cat /etc/resolv.conf ### Autogenerated by host_name.py ### |
どうやら起動時や再起動時にhost_name.pyというのが動いているようです。
1 2 3 4 |
sudo find -name host_name.py ./lib/live/mount/rootfs/1.2.1-2019-06-04-05-21.squashfs/usr/libexec/vyos/conf_mode/host_name.py ./usr/libexec/vyos/conf_mode/host_name.py |
/usr/libexec/vyos/conf_mode/host_name.py
これですね。
このコード見てたら、resolv.conf.dhclient-new-*ってファイルもあるみたいで、こちらには自動でnameserverが適切に設定されている。
でも、これじゃ名前解決できていない。
1 2 3 4 5 |
$ cat resolv.conf.dhclient-new-eth0 search ap-northeast-1.compute.internal nameserver 192.168.0.2 |
1 2 3 4 5 6 7 8 9 |
from vyos.config import Config conf = Config() ~省略~ if conf.exists("system name-server"): hosts['nameserver'] = conf.return_values("system name-server") |
どうもこのあたりが怪しい。
vyos.configを見に行ってみる。
vyos.configが見つからなかった。
個人検証用だし、ってことで強硬策です。
動的にやれそうなことをやってみた
233行目をこうしました。
1 2 3 4 |
#config_text = tmpl.render(config) resolv_dhclient = open('resolv.conf.dhclient-new-eth0', 'r') config_text = resolv_dhclient.read() |
resolv.conf.dhclient-new-eth0には設定があるので、それを書いてしまおうと。
手動で実行してみる。
vyos.configがないと、エラー。
ぐぬぬ。
起動時のプロセスでvyos.config作ってるんだろうなあ多分。
だから、単体では動かないと。
思い切って再起動したらSSHも接続できなくなったので、余計悪化した。
静的に対応した
やりたいことは、OS起動時のhost_name.pyでresolv.confに固定でnameserverが設定できて、セッションマネージャが使えたらそれでいいのだ。
ということで、以下の編集をして、再起動してみました。
1 2 3 |
#config_text = tmpl.render(config) config_text = 'search ap-northeast-1.compute.internal\noptions timeout:2 attempts:5\nnameserver 192.168.0.2' |
OKでした。
セッションマネージャにも接続できました。
動的にやる方法を考えてみた
メタデータにDNSサーバーのIPないかなと思ったのですが、ざっと見た感じ見つけられませんでした。
以下のメタデータでVPCのCIDRはとれるので、プラス2のIPアドレスで動的に設定できそうですが。(06:7b:8e:28:2f:11は環境によって異なります)
http://169.254.169.254/latest/meta-data/network/interfaces/macs/06:7b:8e:28:2f:11/vpc-ipv4-cidr-block
06:7b:8e:28:2f:11はメタデータのmacから取得できる。
ap-northeast-1.compute.internalは、メタデータのplacementから設定できますね。
ふむ。
requestsモジュールをインストールしてrequests.getで取得すればいいか。
今はVPN検証にSSHではなくセッションマネージャを使いたいだけなので、今回はもう東京リージョン、192.168.0.0/xCIDRのVPC限定ということで。
今書いている本の校了が終わって、この需要があるなら実装します。
SSMエージェント再起動も
で、AMIを作って起動したら、セッションマネージャに接続できない。
??
SSMエージェントが起動した後にnameserverを設定してもどうやら遅いのか。
というわけで、host_name.pyの最後にSSMエージェント再起動を追加しました。
1 2 3 4 |
import subprocess args = ['systemctl', 'restart', 'amazon-ssm-agent'] subprocess.check_output(args) |
これでどうだ。
成功しました。
ひとまずこれでやりたいことはOK。
最後までお読みいただきましてありがとうございました!
「AWS認定資格試験テキスト&問題集 AWS認定ソリューションアーキテクト - プロフェッショナル 改訂第2版」という本を書きました。
![](https://www.sbcr.jp/wp-content/uploads/2023/01/9784815617929-1-407x596.jpg)
「AWS認定資格試験テキスト AWS認定クラウドプラクティショナー 改訂第3版」という本を書きました。
![](https://www.sbcr.jp/wp-content/uploads/2024/01/9784815625382-3-420x596.jpg)
「ポケットスタディ AWS認定 デベロッパーアソシエイト [DVA-C02対応] 」という本を書きました。
![](https://www.shuwasystem.co.jp//images/book/637791.jpg)
「要点整理から攻略するAWS認定ソリューションアーキテクト-アソシエイト」という本を書きました。
![](https://book.mynavi.jp/files/topics/135344_ext_06_0.jpg?v=1673514682)
「AWSではじめるLinux入門ガイド」という本を書きました。
![](https://www.yamamanx.com/wp-content/uploads/2023/12/81Rp5O9We6L._SY522_.jpg)
![@yamamanx](https://www.yamamanx.com/wp-content/plugins/lazy-load/images/1x1.trans.gif)
開発ベンダー5年、ユーザ企業システム部門通算9年、ITインストラクター5年目でプロトタイプビルダーもやりだしたSoftware Engineerです。
質問はコメントかSNSなどからお気軽にどうぞ。
出来る限りなるべく答えます。
このブログの内容/発言の一切は個人の見解であり、所属する組織とは関係ありません。
このブログは経験したことなどの共有を目的としており、手順や結果などを保証するものではありません。
ご参考にされる際は、読者様自身のご判断にてご対応をお願いいたします。
また、勉強会やイベントのレポートは自分が気になったことをメモしたり、聞いて思ったことを書いていますので、登壇者の意見や発表内容ではありません。
ad
ad
関連記事
-
-
Amazon Linux2のジャンボフレーム
ユーザーガイドのEC2 インスタンスのネットワークの最大送信単位 (MTU)を試 …
-
-
Route 53で不要なドメインを削除
勢いで作ったけど結局使うのをやめたドメインがあります。 要らないので削除しました …
-
-
JAWS-UG Osaka 第15回勉強会 AWS Summit Tokyo 2016 アップデート追っかけ会
「JAWS-UG Osaka 第15回勉強会 AWS Summit Tokyo …
-
-
EKS「現在の IAM プリンシパルは、このクラスター上の Kubernetes オブジェクトにアクセスできません」
マネジメントコンソールでクラスターのオブジェクトを見ようと、リソースの名前空間や …
-
-
Route 53 の加重ラウンドロビンルーティングでロードバランサー
Route 53の加重ラウンドロビンで両方1に設定してみました。 上図はイメージ …
-
-
CloudTrailのログファイルの整合性検証をAWS CLIで実行しました
CloudTrailのログファイルの検証を「有効」にしました。 上記のようなCl …
-
-
AWS Toolkit for Eclipseで「Error Message: Unable to find a region via the region provider chain. Must provide an explicit region in the builder or setup environment to supply a region.」
AWS Toolkit for Eclipseをセットアップ(2021年版)の環 …
-
-
S3 Intelligent-Tieringのオブジェクトの階層移動をCloudWatchメトリクスで確認
CloudWatchメトリクスの保存期間は現時点で15ヶ月(455日)なのでそろ …
-
-
CodeBuildで執筆原稿データをまとめた
今書いている原稿に対して編集者さんから、「できればで構わないのですが、章ごとにマ …
-
-
RDS + VPC + Lambda + API Gateway + CloudFront + WAF + ACMでAPIを構築する
RDSのMySQLの情報を与えられたリクエストをキーにしてjsonで返すAPIを …