strongswan 无法将 DNS 解析器推送到 OSX Mountain Lion(拆分隧道)

Pie*_*ier 3 domain-name-system ipsec mac-osx split-tunneling strongswan

我想为 OSX 台式机和笔记本电脑设置 IPSec 响应器(VPN 服务器)。

一切似乎都工作正常,除了我无法在启动器(VPN 客户端)上推送要在系统范围内使用的 DNS 服务器。

我在 StrongSwan 5.0.4 中使用 Charon 的 IKEv1 支持,带有 Unity 扩展,并且 OSX 机器使用网络首选项中的“Cisco VPN”以图形方式配置。

我确实尝试更改客户端上的服务顺序以将 VPN 放在顶部,但这没有帮助。

在 中scutils --dns,解析器只出现resolver #1DNS 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
Run Code Online (Sandbox Code Playgroud)

/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
    }
  }
}
Run Code Online (Sandbox Code Playgroud)

ecd*_*dsa 6

关于您的配置的一些评论:

关于您的主要问题,仅当所有流量都通过 VPN 发送时,Mac OS X才会安装无作用域的 DNS 服务器,也就是说,如果leftsubnet=0.0.0.0/0已配置并且客户端未收到任何UNITY_SPLIT_INCLUDE属性。

为了正确解析远程站点的主机名,我建议您通过UNITY_DEF_DOMAIN属性向客户端发送正确的搜索域,例如:

charon {
    plugins {
        attr {
            28674 = strongswan.org
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

该属性只需要一个域名。如果需要多个域,则UNITY_SPLITDNS_NAME可以使用该属性:

charon {
    plugins {
        attr {
            28675 = strongswan.org hsr.ch
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

它需要按原样发送到客户端的以空格分隔的域名列表(导致客户端上每个域的解析器)。

  • 好吧,使用`UNITY_SPLITDNS_NAME` 实际上可以发送多个域。我更新了答案。 (2认同)