У меня есть впн сервер, он в контейнере lxc, у него есть белый ipи есть ещё две сетевухи у каждой по серой подсети, мне вот какому-то клиенту надо давать одну серую, тут всё просто, какому-то две, сейчас решаю через 2 впн подсети, а кому-то вообще и в инет надо будет выходить. Вот это я и хочу разрулить
будем считать что в контейнере у тебя стоит опенвпн и ты назначешь p2p адреса клиентам. каждый клиент прописан в конфигурационном файле и получает всегда свой адрес. т.о. на клиента уходит 4 ip адреса. далее будем считать что клиентские адреса выделяются из сети client_network =
10.0.0.0/23 (например). т.о. любой клиент получает явно адрес из этой подсети.
Также у нас есть 2 серых подсети -
172.16.0.0/24 и 192.168.0.0/24 и выход в интернет.
Каждому клиенту в конфиге мы анонсируем 2 серых подсети и говорим что 172*, 192* сети доступны через впн. В особых случаях мы анонсируем клиенту маршрут по умолчанию, чтобы он мог через нас выйти в интернет.
На стороне iptables:
1) по-умолчанию deny all
2) цепочка построутинг - пишем правило маскарада, для того чтобы клиент мог натиться во все сети и обратные пакет также был бы разначен. Поскольку цепочка фильтер стоит раньше в логике iptables, то по-прежнему действует правило deny all.
3) гранулировано разрешаем клиентам ходить куда им нужно. для этого устанвливаем правило в построутинге что разрешаем с конкретного ip адреса доступ к комбинации серых сетей и интернета. 1 правило - 1 клиент - 1-3 сети.
чтобы во всём этом не запутаться у нас есть ямл который описывает каждого клиента (ip, имя, какие сети анонсировать, в какие сети можно ходить) и этот скрипт создает конфиг для впн сервера, а также убеждается что в iptables присутствует нужное правило.
Надеюсь я понял твою задачу.