ルーティングインスタンスを作りたかった
概要
GCP外部IPを割り当ててるとコストが発生してしまうので、なるべく低コストでインスタンスを動かしたいんよ
何もできなかったから、何やったかのメモだけ残してまた更新予定
現状
discord botを運用していて、コマンドで他のインスタンスをたち上げ、たち下げている。
各インスタンスは外部IPを持っており、そのインスタンスには割り振られたIPを用いてアクセスする。
概算でかかっている費用は各インスタンスの稼働コスト + インスタンスに割り当てられたIPコストがかかっている。
理想
この構成を外部IP一つで実現したい。 つまり、ルーターインスタンスを立ち上げ、特定のポートにアクセスすることで
port12345 - インスタンスA port23456 - インスタンスB …
ということを目指したい。
何が嬉しくなるか?
微々たるものだけど、割当IPがなくなるので、IP代のコスト削減になる。 そして、1つの外部IPで制御ができるということは、いちいち、立ち上がったインスタンスのIPを調べて…という作業がなくなる。
実現までのメモ
まず、ネットワークの知識が無知なので、こんなことができるのかな…というところから調べ、いくつかの手段にたどり着いた。
DNAT, SNAT
正式名称は(Destination | Source) Network Address Translationといい、IPアドレスを変換する技術らしい。 DNATは「送信先アドレス」を、SNATは「送信元アドレス」をそれぞれ変換する。
https://www.infraexpert.com/study/ip10.html 詳しい説明は参考にしたサイト様におまかせ。
この技術を使えば、課題である、ルーターを作ることができそう。
cloud NAT, cloud router
それぞれ、GCPのサービス。
ちゃんと理解していないが、これを使えばまさにやりたいことをやってくれそうな印象。しかし、またGCPのコスト上がるし、正直すべて無知だったので一旦断念
iptables
iptablesは、ご存知パケットのフィルタリングツール。特定ポートにやってくるパケットや特定の送信元以外のアクセスを許可などを構築してくれます。
ここからが自分は知らなくて、iptablesはNATに対応しているとのこと。 正しく設定を書けば、iptablesでルーティングができるらしい。 詳しい知人いわく、「プライベートIPアドレスを持つ端末と直接疎通できないようになってセキュリティ的に向上するからっていう流れでファイアウォールに入っている(と思っている)」 なるほど確かに。。。
まずパケットがインスタンスに通っているかを確認したいけど、その確認方法で詰まってしまった pingは通ってるけどポートが空いていることが確認できない…