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

strongswan не может отправить DNS-преобразователь в OSX Mountain Lion (разделенный туннель)

Я хочу настроить ответчик IPSec (сервер VPN) для настольных компьютеров и ноутбуков OSX.

Кажется, все работает нормально, за исключением того, что я не могу принудительно использовать DNS-сервер для всей системы на инициаторе (VPN-клиенте).

Я использую поддержку IKEv1 Charon в StrongSwan 5.0.4 с расширениями Unity, а машины OSX настраиваются графически с помощью «Cisco VPN» в сетевых настройках.

Я попытался изменить порядок обслуживания на клиенте, чтобы VPN был наверху, но это не помогло.

В scutils --dns, преобразователь отображается только как resolver #1 в DNS configuration (for scoped queries) раздел, а не в первом разделе DNS configuration.

Вот соответствующие файлы конфигурации:

/etc/ipsec.conf:

conn %default
  ikelifetime=24h
  keylife=1h
  rekeymargin=10m
  keyingtries=3
  keyexchange=ikev1
  left=%defaultroute
  auto=add

conn main
  leftfirewall=yes
  leftsubnet=0.0.0.0/0
  leftauth=psk
  right=%any
  rightauth=psk
  rightauth2=xauth-pam
  rightsourceip=172.17.0.0/22

/etc/strongswan.conf:

charon {
  threads = 16
  cisco_unity = yes
  plugins {
    attr {
      dns = 172.16.0.23
      split-include = 10.0.0.0/8, 172.16.0.23/32
      split-exclude = 10.65.36/22
    }
    xauth-pam {
      pam_service = ipsec
    }
  }
}

Пара комментариев к вашему конфигу:

  • Подсеть, для которой вы настроили split-exclude является недействительным. Вероятно, это должно быть

    split-exclude = 10.65.36.0/22
    
  • Если вы используете плагин единства вы должны настроить

    leftsubnet=10.0.0.0/8, 172.16.0.23/32
    

    вместо того split-include в strongswan.conf. Это позволяет назначать разные подсети для каждого соединения.

  • Точно так же DNS-серверы могут быть назначены для каждого соединения через rightdns вариант.

Что касается вашего основного вопроса, Mac OS X устанавливает DNS-серверы без ограничения только если весь трафик отправляется через VPN, то есть если leftsubnet=0.0.0.0/0 настроен, и клиент не получает никаких UNITY_SPLIT_INCLUDE атрибуты.

Чтобы правильно разрешить имена хостов на вашем удаленном сайте, я предлагаю вам отправить клиенту правильный домен поиска через UNITY_DEF_DOMAIN атрибут, например:

charon {
    plugins {
        attr {
            28674 = strongswan.org
        }
    }
}

Этот атрибут принимает только одно доменное имя. Если требуется несколько доменов, UNITY_SPLITDNS_NAME атрибут можно использовать:

charon {
    plugins {
        attr {
            28675 = strongswan.org hsr.ch
        }
    }
}

Он принимает список доменных имен, разделенных пробелами, который отправляется клиенту как есть (в результате получается преобразователь для каждого домена на клиенте).