はじめに
最近お家時間が長いので、独り遊びが捗ります。
プライベートネットワーク上にある外界から隔離されたサーバでyum(やapt-getなど)をするにはどうしたら良いのかを考えてみました。
考えられる方法
一時的に外界へ直接つなぐ
まずはお手軽な方法。
普段はネットワークアダプタを削除しておいて、必要なときだけ復活させる方法です。NICの無効化/有効化、再起動を行うには? ifdown/ifupコマンドが参考になりました。
この方法はお手軽な反面、公開前提のサーバに対して一般的に必要な処置を施しておくことが必要です。どれだけアップデートをサボってたかによりますが、しばらくの間外界とやり取りできることになります。時間的にサボればサボるほど、アップデートに要する時間が長くなると思います。
お呼びでない方々は、そのスキを突いて遊びに来ます。外界から隔離しているはずのサーバの存在が知れ渡ってしまうと、対策がめんどくさいことになります。
外界につながっているサーバを経由する
SSHポートフォワーディングというものらしいですね。「プライベートサブネット内のLinuxでオンラインパッケージアップデートする方法を考えてみた」が参考になりました。外界につながっているサーバを経由して内側のサーバにつなぐための道を作るイメージですかね。
ただし、サーバの構成によっては常に道が存在する必要がない場合もあります。例えば定期バックアップのデータを保存しておくだけのサーバなど。そういう場合に「いつも開いている道」があるのはどうにも気持ちが悪いです。
yum等をする頻度もcronで1日1回などが現実的でしょうし、要るときだけ道を作ることができれば良いんですけどね。必要なときだけSSHのトンネルを通し常時閉じておくのが妥当なところでしょうか。
自前でリポジトリサーバを作る
プライベートyumリポジトリの作成が参考になりました。
ドンとプライベートネットワークにサーバを1つ置いてそれをリポジトリサーバにしてしまう方法です。プライベートネットワーク内が大規模な構成になれば、それぞれのサーバ1つずつアップデートするよりも、自前のリポジトリサーバを置いてそこからアップデートしたほうが経済的ですね。ローカルネットワークで速度も十分ですし。
ただし、プライベートネットワーク内にサーバが2台とかのときは逆にもったいないですね。それなら1つ目か2つ目の方法で一台ずつ対応したほうが早いと思います。また、サーバを1台追加するのでお金がかかります。
それに、普段内側だけ向いているリポジトリサーバをアップデートするために、結局外界とつなぐ方法を考えないといけません。
まとめ
お手軽さで選ぶならば一時的に外界へ直接つなぐ
方法が一番かと思います。
スマートさで選ぶならば外界につながっているサーバを経由する
方法が良いと思います。あとは規模によりますが、大規模なサーバ群になった場合は、自前でリポジトリサーバを作る
方法と外界につながっているサーバを経由する
のコンボですかね。
いずれにせよセキュリティにも関係してくることになるので、ちゃんと理解しないといけません。こういうことに関する実務的なアプローチって実際のところどうなのか、とても知りたいですね。
まぁ詳しくは教えてもらえないでしょうけど!
お決まりの免責事項
あくまでも思考実験のみで実際に行っていないので参考程度にしてくださいね。サーバの構成や環境により、若干アプローチが変わるかもしれません。実際にやるならば事前によくお調べの上、自己責任で!!