macOS→VagrantのUbuntu→LXDコンテナへのポートフォワーディング
はじめに
VagrantでUbuntu 18.04 LTSとLXDをインストールする手順 で構築したLXDの環境で、macOS→VagrantのUbuntu→LXDコンテナへのポートフォワーディングをしたのでメモです。
今回はhttpsの443番ポートで試しました。
macOSからVagrantへのポートフォワーディング
基本的にはVagrantの公式ドキュメント
Forwarded Ports - Networking - Vagrant by HashiCorp
のように forwarded_port
という設定をVagrantfileに追加すればOKです。
ただし、ホストでバインドするポートをhttpの80番やhttpsの443番のように1024番以下にするときは、すんなりとは行きません。上記のページの Options Reference の host の説明によると rootで vagrant up
を実行すれば可能ですが、推奨されないとのことです。
ということで guestは443、hostは8443 と指定しました。
OSX における Vagrant 80番ポートフォワーディング - Qiita ではvagrant-triggersというプラグインを使ってVMの起動・停止時にmacOSの pfctl
コマンドを実行して、ホストのローカルホストでポートフォワーディングすると良いらしいです。
今回はちょっと試すだけだったのでvagrant-triggersは使わず、手動で pfctl
を実行しました。
Mac pfctl Port Forwarding | Sal Ferrarello も参考にして macOS で以下のコマンドを実行して 443から8443 へのポートフォワードを行いました。
echo "
rdr pass inet proto tcp from any to any port 443 -> 127.0.0.1 port 8443
" | sudo pfctl -ef -
ポートフォワードの設定確認は以下のコマンドで行います。
sudo pfctl -s nat
ポートフォワードの削除は以下のコマンドで行います。
sudo pfctl -F all -f /etc/pf.conf
pfctl
とVagrantのforwarded_portの合わせ技で macOS のローカルホストの443番ポートからVagrant上のUbuntuの443番ポートへのポートフォワードができるようになりました。
Ubuntuのファイアウォールで443番ポートを許可
Ubuntuには ufw
というファイアウォールの管理用コマンドがあります。が、慣れているということで今回は iptables を使うことにしました。
まず ufw の状態を確認してみると無効になっていました。
$ sudo ufw status
Status: inactive
以下のコマンドで iptables-persistent
をインストールします。
sudo apt install iptables-persistent
CUIのダイアログでIPv4とIPv6のファイアウォールの現在の設定を保存するか聞かれるのではいと答えます。
するとそれぞれ /etc/iptables/rules.v4
と /etc/iptables/rules.v6
に保存されます。
このうち前者を編集します。
sudo vim /etc/iptables/rules.v4
*filter
セクションの -A INPUT
の行が複数ありますが最後の後に以下の行を追加します。
-A INPUT -i lxdbr0 -p tcp -m tcp --dport 443 -j ACCEPT
保存してvimを抜けた後、以下のコマンドを実行して反映します。
sudo apt iptables-restore < /etc/iptables/rules.v4
以下のコマンドを実行して指定通り反映されたかを確認します。
sudo apt iptables-save
UbuntuからLXDコンテナへのポートフォワーディング
LXDのproxyを使ってポートフォワーディング の手順で設定してください。
動作確認
これでmacOS上のブラウザで https://localhost にアクセスするとLXDコンテナの443番ポートにアクセスできるようになりました。 まとめると macOS 443→ macOS 8443→ Vagrant 443→LXD 443 という4段フォワードとなっています。