Я пишу bash приложение, которое работает на кластере серверов Ubuntu 18.04 и обеспечивает и синхронизирует учетные записи пользователей на нескольких серверах, развернутых в разных географических c регионах. Сервер позволяет перенаправлять пользователей на соответствующий сервер geographi c в зависимости от их текущего местоположения, а затем предоставляет им доступ к оболочке S SH.
Сервер в настоящее время имеет один сетевой интерфейс c (eth0). Я пытаюсь включить предоставление дополнительных «виртуальных» сетевых интерфейсов для каждого пользователя в сценарий bash. Это должно позволить каждому пользователю иметь отдельный внутренний IP-адрес, который должен иметь доступ к inte rnet с настроенными правилами NAT. Каждому пользователю всегда будет предоставлен один и тот же внутренний IP-адрес независимо от того, на какой географический сервер c он перенаправлен.
Например, следующий файл конфигурации определяет имена виртуальных интерфейсов и 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"
}
]
}
Если пользователь2 входит на сервер, сценарий 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
I для сервера "/ proc / sys / net / ipv4 / ip_forward" установлено значение 1 для включения пересылки IP-адресов, но я не могу определить правильные правила iptables MASQUERADE, FORWARD и NAT для добавления в сценарий запуска.
Пока я не могу получить доступ к rnet, работающему через виртуальные интерфейсы.
Я не могу понять, что я делаю неправильно, и любая помощь будет оценена.