2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

ProxmoxVEで仮想基盤を構築してみた話

Last updated at Posted at 2024-11-11

背景

前回、サークルの部室にISPとピアリングしてもらい、ネットワークを構築したというお話をしました。その後、所有しているIPアドレスを活用し、Docker専用のサーバを構築し、部室運営に必要なサービスをDockerのコンテナにして運営してきましたが、「Webサーバを使わせてもらいたい」、「Linux仮想サーバを使わせて欲しい」等の要望があり、要請がある度にアプリケーションをコンテナ化してもらいDocker上にデプロイしましたが、外部の人が直接仮想基盤をいじらせたくないことや、デプロイが煩わしいこともあり仮想基盤の内部にLXCを作り、外部からのSSHによりLXC内部に直接アクセスしてもらえるように、ProxmoxVEへの移行を決定しました。
ただ、ProxmoxVEへ移行するだけじゃ今回の要件を全部満たすことはできないので、ProxmoxVEを導入した後、どのように構成したかを簡単にまとめてみようと思います。

要件定義

  1. リバースプロキシによるHTTPルーティングができること
  2. ProxmoxVE内部のコンテナに外部から直接SSHができること
  3. NATによるプライベートIP割り当てでグローバルIPの節約

構成図

proxmoxve.drawio.png

SSHPiper

SSHPiperはユーザ名でSSHのコネクションをルーティングしてくれるもので、同じIPでも、
user200@AAA.BBB.CCC.DDD -> root@10.0.0.2
user201@AAA.BBB.CCC.DDD -> root@10.0.0.3
のようにルーティングしてくれます。
したがって、コンテナごとにグローバルIPアドレスの割り当てや、ポートフォワーディング(マスカレード)をせずに外部から一つのIP、一つのポートだけでも十分アクセスができるようになります。

Nginx Proxy Manager

HTTPも同様に、ホストごとのルーティングを行うべく、GUIで手軽にルーティングの制御ができるNginx Proxy Managerを導入しました。
Nginx Proxy ManagerはProxmoxVE内部のNATと接続しているため、ユーザにユーザ所有のホストにコンテナのグローバルIPを登録してもらい、Nginx Proxy Managerでホスト名に対応させプライベートIPの10.0.0.2~254を登録することで、一つのIPで複数のWebサービスを運用することができます。

移行後の感想

  • 仮想基盤をDockerのみ運用していたため、ユーザが直接SSHにアクセスできず、いちいちdocker-compose.ymlやDockerfileを受け取り、デプロイしていましたが、その手間が省けました。
  • また、ProxmoxVEからデフォルトでQoSを提供してくれるため、コンテナのネットワークスピードの制限も可能で、不意にコンテナ内部でネットワーク障害を起こす恐れを防ぎました。
  • VPNを構成し、貸出用のコンテナを除きすべての操作はVPN経由でできるようにしたため、外部からProxmoxVEの管理者パネルやSSHの攻撃の可能性を完全に封じました。
  • DockerをそのままProxmoxVEに移行させたため、多少構成が雑になってしまいました。
  • 貸出用コンテナの内部からユーザが任意にDockerをインストールし、CI/CDパイプラインの構成もできるため、管理の融通が効くようになりました。

参考記事

コンテナ内部から/dev/pppが使えない問題

ユーザー名ベースで接続先を切り替えるSSHリバースプロキシ「SSH Piper」を使ってみた

2
1
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
2
1

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?