ВМ
Также у нас есть 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 присутствует нужное правило.
Надеюсь я понял твою задачу.