Назад | Перейти на главную страницу

Сопоставьте IP-адрес виртуального сетевого интерфейса с физической сетью

Маршрутизатор Linux VPN имеет IP 192.168.1.1/24 (eth0), в той же сети есть другие сетевые устройства с фиксированными IP-адресами Machine A 192.168.1.20 и Machine B 192.168.1.21. Чтобы получить доступ к этим устройствам через VPN, я подключаюсь к серверу VPN, ввожу IP-адрес VPN маршрутизатора и просто меняю последний октет.

Например, если IP-адрес VPN маршрутизатора - 10.1.1.1/24, то для доступа к машине A я перехожу к 10.1.1.20, а к машине B - 10.1.1.21 ... Все это работает отлично.

Проблема в следующем. Иногда в сети также присутствуют машина C и машина D, но у них есть другие (фиксированные) IP-адреса вне подсети, например: 192.168.2.50 и 192.168.2.51.

На маршрутизаторе VPN я добавил виртуальный сетевой интерфейс (eth0: 0) с IP 192.168.2.1 ... теперь я могу подключиться к машине C и D с маршрутизатора напрямую, используя SSH, но ни с машины A, ни B, ни через VPN.

Через VPN мне разрешен доступ только к устройствам с IP 192.168.1.X.

Моя цель (или первая идея) - сопоставить в маршрутизаторе IP-адреса с машины C и D с другим IP-адресом, чтобы VPN-сервер подумал, что есть еще два устройства с "достижимыми" IP-адресами ...

Например, реальный IP-адрес компьютера C 192.168.2.50 должен отображаться как 192.168.1.50 .. и из VPN я хотел бы получить к нему доступ как 10.1.1.50.

Это возможно? Или, может быть, у кого-то есть идея получше / попроще?

Обновление 16.11.2015:

У VPN-маршрутизатора есть опция, в которой вы можете добавить сценарии запуска, в этой части у меня есть следующее:

#This part comes automatically
iptables -t nat -D PREROUTING -d '10.1.1.0/24' -i tun0 -j NETMAP --to '192.168.1.0/24'
iptables -t nat -I PREROUTING -d '10.1.1.0/24' -i tun0 -j NETMAP --to '192.168.1.0/24'
iptables -t nat -D POSTROUTING -s '192.168.1.0/24' -o tun0 -j NETMAP --to '10.0.1.0/24'
iptables -t nat -I POSTROUTING -s '192.168.1.0/24' -o tun0 -j NETMAP --to '10.0.1.0/24'
#Start of manually entered data
ifconfig eth0:1 192.168.2.1
#Reach machine C
iptables -t nat -D PREROUTING -d '10.1.1.50' -i tun0 -j NETMAP --to '192.168.2.50'
iptables -t nat -I PREROUTING -d '10.1.1.50' -i tun0 -j NETMAP --to '192.168.2.50'
iptables -t nat -D POSTROUTING -s '192.168.2.50' -o tun0 -j NETMAP --to '10.1.1.50'
iptables -t nat -I POSTROUTING -s '192.168.2.50' -o tun0 -j NETMAP --to '10.1.1.50'
#Reach machine D
iptables -t nat -D PREROUTING -d '10.1.1.51' -i tun0 -j NETMAP --to '192.168.2.51'
iptables -t nat -I PREROUTING -d '10.1.1.51' -i tun0 -j NETMAP --to '192.168.2.51'
iptables -t nat -D POSTROUTING -s '192.168.2.51' -o tun0 -j NETMAP --to '10.1.1.51'
iptables -t nat -I POSTROUTING -s '192.168.2.51' -o tun0 -j NETMAP --to '10.1.1.51'

Добавление ручных записей после автоматически сгенерированных, позволяет получить доступ к машине C и машине D с помощью VPN. Обратная сторона очевидна: если у меня 20 машин, мне нужно добавить длинный список с помощью iptables. Или есть лучший способ сделать это?

Прямая связь между семейством 192.168.1.X (например, машина A и машина B) с семейством 192.168.2.X (например, машина C и машина D) и наоборот по-прежнему невозможна.