1

私は、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 ルールがわかりません。

これまでのところ、仮想インターフェイスからインターネット アクセスを機能させることができません。

私が間違っていることを理解できないようで、助けていただければ幸いです。

4

1 に答える 1