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

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

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

Я использую поддержку IKEv1 Харона в 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
    }
  }
}

1 ответ

Решение

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

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

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

    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
        }
    }
}

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

Другие вопросы по тегам