ルーターのconfigはdiffで完全一致。なのに2台目だけ繋がらない「画面コピペ」の罠
1台目は動いたのに、同じ条件の2台目だけ繋がらない
夏らしく、怖い話 を書きます…
先日、ヤマハのルーター RTX1220 を2台、同じ構成で設定する機会がありました。
クロスパス(Xpass)の固定IP1契約・RAプロキシ構成で、設定はヤマハが公開している設定例を参考にしました。
1台目は何事もなく開通した のですが、IPアドレスなどの固有の値だけ書き換えて、同じ config を2台目に流し込みました。これで終わりだと思っていたのですが、2台目はIPv4で外部に出られません。
設定は同じ。機器も同じ型番。回線も開通済み。それでも繋がりません 😱
おばけの仕業かと思いたくなるところでしたが… 👻
原因は config のコピペ でした。言ってしまえばただの不注意ですが、原因にたどり着くまでにかなり時間を使いました…
この記事では、そのときに詰まったところと、同じ踏み方をしないための注意点を書いていきます。
config を diff しても差分が出ない
まず疑ったのは設定内容の間違いです。1台目と2台目の show config の出力を並べて diff を取りました。
IPアドレスなどの固有の値以外の差分はゼロでした。
投入時にエラーも出ていません。diffの差分はゼロで、機器も回線も問題ないはずなのに、なぜか2台目だけが繋がらない、という状態です。
ここで完全に手が止まりました。config が同じなら config 以外を疑うしかないので、しばらくそちらの方向で調査していましたが、結局そこに原因はありませんでした。
原因は config に埋め込んだ Lua スクリプトだった
クロスパスの固定IP1・RAプロキシ構成では、ルーター(LAN1)に付与された IPv6 アドレスを DDNS のアップデートサーバーに通知する必要があります。この通知は、ヤマハが提供している Lua スクリプトのサンプルを config に埋め込むことで実現します。
embedded file xpass_ra.lua <<EOF
(Lua スクリプト本体)
EOF
なんと、この Lua スクリプトの中身が、コピペで崩れていたのです…
本来は1行であるはずのこの記述が、
LOG_PTN = "Add%s+IPv6%s+prefix.+%(Lifetime%:%s+%d+%)%s+via%s+" .. IPv6_IF .. "%s+by"
2台目では、途中で改行が入った状態になっていました。
LOG_PTN = "Add%s+IPv6%s+prefix.+%(Lifetime%:%s+%d+%)%s+via%s+" .. IPv6_IF .. "%
s+by"
Lua では通常の文字列リテラルが行をまたげないので、これは構文エラーです。スクリプトが起動せず、IPv6 アドレスの通知が行われないため、IPv4通信ができない状態になっていました。
なぜ気づけなかったのか
崩れた原因は、show config の出力をターミナルの画面からコピーしたことでした。
show config の出力は、ルーターが console columns の設定値(初期値は 80 桁)で折り返して送ってきます。画面上では折り返しなのか本物の改行なのか区別できませんが、送られてきている時点ですでに改行が入っているため、コピーすればそのまま取り込まれます。
そして厄介なのが、崩れた状態を show config で見ても分からないことです。
実際、ターミナル上では1台目も2台目もこのように表示されていました。
LOG_PTN = "Add%s+IPv6%s+prefix.+%(Lifetime%:%s+%d+%)%s+via%s+" .. IPv6_IF .. "%
s+by"
- 1台目:元のLuaファイルでは1行だが、
show configの出力時に80桁で表示用の改行が入る - 2台目:Luaファイル自体に本物の改行が入っている
表示はまったく同じになります。 だから両方の出力を diff しても差分がゼロだったわけです。
さらに、embedded file <<EOF ~ EOF の中身はコマンドとして解釈されず、そのままファイルとして保存されます。何を入れてもエラーが出ません。 Lua の構文エラーが効くのはスクリプトの起動時なので、config の投入自体は成功したように見えます。
Luaの実行ログから遡って気づけましたが、そこに辿り着くまでに時間がかかってしまいました。
おわりに
一番の教訓は、show config の出力を設定の原本にしないということでした。
コピペそのものが悪いわけではありません。手元のエディタで書いた config をターミナルに貼り付けるのは普通の作業です。危ないのは逆方向、画面に表示されたものをコピーして持ち出すときです。画面を経由すると、折り返しと本物の改行が区別できなくなります。
画面から取らざるを得ない場合は、show config の前に console columns を広げて、折り返しが発生しない状態にしておくと安全です。
# ログ出力前に、コンソールの表示幅を広げておく(例: 200桁)
> console columns 200
> show config
また、そもそもターミナルの画面からコピーせず、TFTPなどを使って設定ファイル(config.txt など)を直接ルーターからダウンロード・アップロードするのも確実な方法です。この運用にしておけば、今回のような画面表示に起因するトラブルを根本から防ぐことができます。
貼り付けたあとに確認する手もあります。ターミナル上では見分けられませんが、エディタの折り返し表示をオフにすれば、本物の改行はそのまま行として見えます。長い行が途中で切れていないか、行の途中から始まっている行がないかを見れば気づけます。
そしてこれは、ネットワーク機器に限った話でもありません。SQL、YAMLなど、そのまま機械に食わせるテキスト でも同じことがあり得ます。画面表示を中継地点にせず、プレーンテキストのまま持ち回るのが安全ですね。
夏の怪談ではなく、ただの注意不足で、おばけではなく、改行が潜んでいたという話でした。
同じところで悩んでいる方の役に立てば幸いです 🙏
AUTHOR

朝日放送グループホールディングス株式会社 デジタル・アーキテック局 データ戦略チーム
2025年新卒入社で、初期配属で現在の部署に配属される。 現在は、データ基盤の整備を主として、アプリ開発や業務改善の伴走支援についても取り組み中。 楽しみながらコツコツと頑張ります!




