Пропадает доступ к локалке за VPN после разрыва соединения

Тема в разделе "Общий форум", создана пользователем mrrc, 23 мар 2017.

  1. mrrc

    mrrc Участник

    Не могу понять, удаленный клиент подключается через VPN к микротику (виртуальная сеть 192.168.88.0/24), все ок, галка использовать основной шлюз в удаленной сети в настройках подключения пользователя снята.
    За микротиком локальная сеть 192.168.10.0/24, доступ к одному узлу которой клиент должен получить. На внутреннем интерфейсе микротика включен proxy-arp.
    Соответственно у клиента даем маршрут до этой локальной подсети:

    route add 192.168.10.0 mask 255.255.255.0 192.168.88.1 -p

    Доступ к узлу есть, все работает.
    Стоит клиенту отключиться от VPN, после повторного подключения доступ к удаленному узлу из 10-й сети уже отсутствует. При этом если руками удалить сделанный ранее маршрут и дать его снова при уже поднятом VPN-подключении - доступ появляется.

    По количеству пакетов в firewall микротика видно, что пока не "передернешь" route на машине удаленного клиента, ни один пакет не проходит.
    На ходу не могу понять в чем дело?
     
  2. Dmitry_S

    Dmitry_S Участник

    route add нужно делать после каждого подключения. Ключ -р тут не имеет смысла
     
  3. mrrc

    mrrc Участник

    Уже выяснилось, что это проблема самой системы Windows, решения как такового нет. СМАК под не серверную платформу х64 я не нашел.
    Соединение должно подниматься автоматически после возможного разрыва автономно, без участия пользователя, поэтому делать повторные route add после следующего поднятия соединения некому.
     
  4. Dmitry_S

    Dmitry_S Участник

    как вариант - скрипт в планировщик
     
  5. mrrc

    mrrc Участник

    Планировщик Windows? Например?
    Проверять доступность узла в 192.168.10.х раз в пять минут и в случае чего делать route?
     
  6. Dmitry_S

    Dmitry_S Участник

    Да. Раз в 5 минут или в час - это уже по вашим потребностям. Ночью можно реже, днем чаще
     
  7. mrrc

    mrrc Участник

    Мысль интересная!
    У вас есть пример такого *.bat-ника?
     
  8. Dmitry_S

    Dmitry_S Участник

    батники я не люблю, предпочитаю vbs. В этой теме я давал пример запуска route add скриптом
    вот функция для проверки пинга:
    Код:
    Function Ping(sComputer)
    On Error Resume Next
    Dim oWMI, cPing, oPing
    
    Set oWMI = GetObject("winMgmts:")
    Set cPing = oWMI.ExecQuery("Select * from Win32_PingStatus Where Address = " & "'" & sComputer & "'")
    For Each oPing In cPing
      Ping = CBool(oPing.StatusCode = 0)
    Next
    Set oPing = Nothing
    Set cPing = Nothing
    Set oWMI = Nothing
    End Function
     
  9. mrrc

    mrrc Участник

    Это вы сильны, неплохо!)
    Если хорошо владеете программированием, поможете доработать оба ваших примера в единое целое?
    Функцию первоначально устанавливать связь и "перезвона" в случаях обрыва соединения отдать можно системе, а запуском скрипта с определенной периодичностью только проверять доступность узла в удаленной заданной сети. Если пинга нет, значит имел место разрыв соединения с последующим переподключением и нужно выполнить route, предварительно на всякий случай выполнив route delete rNet, наверное.
    Код:
    gwAddress = "192.168.88.1" 'адрес шлюза
    rNet = "192.168.10.0" ' удаленная сеть
    
    Dim WshShell
    Set WshShell = CreateObject("WScript.Shell")
    
    'Проверка пинга
    Function Ping(sComputer)
    On Error Resume Next
    Dim oWMI, cPing, oPing
    
    Set oWMI = GetObject("winMgmts:")
    Set cPing = oWMI.ExecQuery("Select * from Win32_PingStatus Where Address = " & "'" & sComputer & "'")
    For Each oPing In cPing
      Ping = CBool(oPing.StatusCode = 0)
    Next
    Set oPing = Nothing
    Set cPing = Nothing
    Set oWMI = Nothing
    End Function
    
    ' Если пинга нет, то делаем route
    WshShell.Run "%comspec% /c route add " & rNet & " MASK 255.255.255.0 " & gwAddress, 0, True
    
    Set WshShell = Nothing
    
     
  10. mrrc

    mrrc Участник

    Благодарю за поданную идею, вопрос решен.