Захотел я получить доступ к сети снаружи... хотеть не вредно ^_^
Имеем:
ADSL -> Spliter -> Zyxel (ADSL) -> ZYXEL (WiFi Router - он же шлюз) -> Local Area (192.168.0.0/24)
Как видно из строчки выше, проблему решить не так просто.
Благо ip статический.
В сети есть файлопомойка на Ubuntu, тачка вечно включена, ее мы и задействуем.
На машинке поднимаем OpenVPN server (у меня 10.88.88.0/24)
Пробрасываем порты на роутерах (ну здесь все просто)
Устанавливаем клиентскую часть на машинке за пределами сети.
Подключились?, славно, а вот теперь проблема.
Имеем доступ на сервер, и никуда больше. Надо объяснить серверу, что он является шлюзом между VPN сетью и локальной, где локальная выступает в роли интернета.
Для этого включаем форвардинг:
В принципе кажется все, ан нет, клиент не понимает, что 192.168.0.ХХХ это там, за интерфейсом с ip 10.88.88.ХХХ
Для того, чтобы он образумился, нужно создать правило роутинга:
Грубо, но это выглядит как-то так:
Update 13/08/2015
Также оказалось полезным для для форвардинга в VPN сеть снаружи.
Ни для кого не секрет что форвард из внешней сети во внутреннюю решается одним правилом:
Именно здесь и пригодилось правило описанное выше
Также друг сказал что-то за:
Имеем:
ADSL -> Spliter -> Zyxel (ADSL) -> ZYXEL (WiFi Router - он же шлюз) -> Local Area (192.168.0.0/24)
Как видно из строчки выше, проблему решить не так просто.
Благо ip статический.
В сети есть файлопомойка на Ubuntu, тачка вечно включена, ее мы и задействуем.
На машинке поднимаем OpenVPN server (у меня 10.88.88.0/24)
Пробрасываем порты на роутерах (ну здесь все просто)
Устанавливаем клиентскую часть на машинке за пределами сети.
Подключились?, славно, а вот теперь проблема.
Имеем доступ на сервер, и никуда больше. Надо объяснить серверу, что он является шлюзом между VPN сетью и локальной, где локальная выступает в роли интернета.
Для этого включаем форвардинг:
sysctl -w net.ipv4.ip_forward="1"
применить без перезагрузки sysctl -p
чтобы сохранить при перезагрузке, в файле /etc/sysctl.conf добавить или раскомментировать строку net.ipv4.ip_forward=1И добавляем правило, будто все мы в VPN это один сервер.
iptables -t nat -A POSTROUTING -o eth1 -j MASQUERADEeth1 - это интерфейс смотрящий в локальную сеть, за подробностями сюда
В принципе кажется все, ан нет, клиент не понимает, что 192.168.0.ХХХ это там, за интерфейсом с ip 10.88.88.ХХХ
Для того, чтобы он образумился, нужно создать правило роутинга:
route add -p 192.168.0.0 MASK 255.255.255.0 10.88.88.5 METRIC 1Прошу обратить внимание, что в свойствах tap интерфейса на Windows шлюз не указан, я долго думал пока не обратил внимание на:
C:\>route print
Сетевой адрес Маска сети Адрес шлюза Интерфейс Метрика
10.88.88.1 255.255.255.255 10.88.88.5 10.88.88.6 20Как видно, в качестве шлюза выступает 10.88.88.5, его то мы и указываем в правиле, у Вас он может отличаться. Итог, мы получили необходимое, трассировка показывает правильный маршрут.
Адрес шлюза указывается не всегда, иногда помогает метод тыка
Грубо, но это выглядит как-то так:
А теперь посмеемся, если вздумаете попасть в сеть 192.168.0.0/24 через такой туннель, находясь в сети 192.168.0.0/24, то ничего не получится. Удачи, ХХД...
Update 13/08/2015
Также оказалось полезным для для форвардинга в VPN сеть снаружи.
Ни для кого не секрет что форвард из внешней сети во внутреннюю решается одним правилом:
-A PREROUTING -d ХХХ.ххх.ХХХ.ххх/32 -p tcp -m tcp --dport 12221 -j DNAT --to-destination ZZZ.zzz.ZZZ.zzz:3389Ну иногда требуется добавить построутинг:
-A POSTROUTING -d ZZZ.zzz.ZZZ.zzz/32 -p tcp -m tcp --dport 12221 -j SNAT --to-source ХХХ.ххх.ХХХ.хххИ в очень редких случаях маскардинг на порт:
-A POSTROUTING -p tcp -m tcp --dport 12221 -j MASQUERADEНо это все работает на шлюзе, т.е. при попытке получить доступ к сети VPN с внешнего IP VPN сервера, мы получим отлуп даже при FORWARD -j ACCEPT.
Именно здесь и пригодилось правило описанное выше
iptables -t nat -A POSTROUTING -o tap1 -j MASQUERADEЕдинственная проблема - после такого правила, для многоконфигурационных серверов VPN придется явно задавать интерфейс в конфиге.
Также друг сказал что-то за:
iptables -A FORWARD -m conntrack --ctstate RELATED,ESTABLISHED -j ACCEPT
Комментариев нет:
Отправить комментарий