LoginSignup
6
14

More than 5 years have passed since last update.

LXDコンテナからコンテナ外へポートフォワーディング

Last updated at Posted at 2018-11-01

方法1:LXDのProxyを使う (LXD >= 3.0)

Ubuntu 18.04 LTSの場合、デフォルトでLXD3.0がインストールされますので、こちらの方法が簡単でおすすめです。

追加

$ lxc config device add <コンテナ名> <デバイス名> proxy listen=tcp:0.0.0.0:<ポート番号> connect=tcp:127.0.0.1:<ポート番号> bind=host
  • <デバイス名> は、識別するためのラベルのようなもので、任意の名称を指定することが出来ます。
  • listen=tcp:0.0.0.0:<ポート番号> は、転送先(ホスト)に関する設定です。0.0.0.0の場合、全てのNICに割り当てられたIPアドレスが転送先(待ち受けIPアドレス)となります。特定のIPアドレスを指定した場合、指定されたIPアドレスが転送先となります。
  • connect=tcp:127.0.0.1:<ポート番号> は、転送元(コンテナ)に関する設定です。127.0.0.1の場合、コンテナのlocalhostが転送元となります。127.0.0.1以外の場合、指定されたIPアドレスが転送先となります。
  • bind=host の場合、コンテナが転送元、ホストが転送先となります。

削除

$ lxc config remove <コンテナ名> <デバイス名>

参考

方法2:iptablesを使う

# iptables -t nat -A PREROUTING -d <ホストのNICのIPアドレス/32> -p tcp -m tcp --dport <転送先ポート番号> -j DNAT --to-destination <コンテナのIPアドレス:ポート番号>
  • 転送元となるコンテナのIPアドレスは、lxc listコマンド等で事前に確認します。
  • ホストに割り当てられたIPアドレスが複数存在する場合、転送先としたいNICのIPアドレス(あるいはエイリアスのIPアドレス)を指定します。
  • iptablesの設定を永続化させたい場合は、service iptables save/sbin/iptables-save, netfilter-persistent saveなど(コマンドはディストリビューションにより異なります)を実行し、設定を保存します。

方法3:HAProxyを使う

/etc/haproxy/haproxy.cfg
# globalとdefaultsは省略します。

frontend forward_service
  bind *:<転送先ポート>
  mode tcp
  default_backend forward_server

backend forward_server
  server forwardsv01 <コンテナのIPアドレス:ポート番号> check
  • bind *:<転送先ポート>*は、ホストに割り当てられた全てのIPアドレスが転送先(待ち受け先)ポートとなります。特定のIPアドレスを転送先とする場合は、 *を転送先とするIPアドレスに変更します。
  • サービスのコネクションが頻繁に切断される場合は、転送するサービスに応じて、timeout connect timeout server timeout clientなどのパラメータを設定します。
6
14
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
6
14