私は、Ubuntu 18.04 サーバーのクラスターで実行され、異なる地理的地域に展開された複数のサーバー間でユーザー アカウントをプロビジョニングおよび同期する bash アプリケーションを作成しています。サーバーは、ユーザーが現在の場所に応じて適切な地理的サーバーにリダイレクトされることを許可し、SSH シェル アクセスを許可します。
サーバーには現在、1 つのパブリック ネットワーク インターフェイス (eth0) が 1 つあります。各ユーザーの追加の「仮想」ネットワーク インターフェイスのプロビジョニングを bash スクリプトに取り入れようとしています。これにより、各ユーザーは、NAT ルールが設定された状態でインターネットにアクセスできる個別の内部 IP アドレスを持つことができます。各ユーザーには、リダイレクト先の地理的サーバーに関係なく、常に同じ内部 IP アドレスがプロビジョニングされます。
たとえば、次の構成ファイルは、ログインするすべてのユーザーの仮想インターフェイス名と IP アドレスを定義します。この構成ファイルは、私が作成した REST API を使用して各サーバー間で同期されます。
{
"users": [
{
"username": "user0",
"interface": "veth0",
"ip_address": "192.168.1.0"
},
{
"username": "user1",
"interface": "veth1",
"ip_address": "192.168.1.1"
},
{
"username": "user2",
"interface": "veth2",
"ip_address": "192.168.1.2"
},
{
"username": "user3",
"interface": "veth3",
"ip_address": "192.168.1.3"
}
]
}
user2 がサーバーにログインすると、bash スクリプトは次のように適切なインターフェイスと IP を自動的に作成します。
ip link add type $interface
ifconfig $interface $ip_address
これにより、ifconfig 出力に以下が追加されます。
veth2: flags=4163<UP,BROADCAST,RUNNING,MULTICAST> mtu 1500
inet 192.168.1.2 netmask 255.255.255.0 broadcast 192.168.1.255
ether a6:e7:de:40:9a:28 txqueuelen 1000 (Ethernet)
RX packets 27 bytes 2082 (2.0 KB)
RX errors 0 dropped 0 overruns 0 frame 0
TX packets 1132 bytes 48520 (48.5 KB)
TX errors 0 dropped 0 overruns 0 carrier 0 collisions 0
サーバーで "/proc/sys/net/ipv4/ip_forward" を 1 に設定して IP 転送を有効にしていますが、起動スクリプトに追加する適切な iptables MASQUERADE、FORWARD、および NAT ルールがわかりません。
これまでのところ、仮想インターフェイスからインターネット アクセスを機能させることができません。
私が間違っていることを理解できないようで、助けていただければ幸いです。