结论

结论

我正在尝试连接到 FortiGate 并通过 IPsec VPN 隧道访问我们的持续集成服务器。

我无法控制 FortiGate 的配置。

在运行 Windows 10 的笔记本电脑上,我成功使用 FortiClient 访问位于 的集成服务器http://ourCIserver:8080

现在,我的另一台笔记本电脑运行 Arch Linux 4.14.15,我正在使用强天鹅5.6.1 建立IPsec隧道。

sudo ipsec restart令人鼓舞的是,从 的最后一部分来看,隧道似乎是在调用 时建立的sudo ipsec statusall

Status of IKE charon daemon (strongSwan 5.6.1, Linux 4.14.15-1-ARCH, x86_64):
  uptime: 8 seconds, since Feb 14 15:45:58 2018
  malloc: sbrk 2789376, mmap 0, used 869600, free 1919776
  worker threads: 11 of 16 idle, 5/0/0/0 working, job queue: 0/0/0/0, scheduled: 5
  loaded plugins: <omitted>
Listening IP addresses:
  10.0.0.1
Connections:
         myConn:  %any...vpn.the-vpn-server.com  IKEv1 Aggressive, dpddelay=30s
         myConn:   local:  [theuser] uses pre-shared key authentication
         myConn:   local:  [theuser] uses XAuth authentication: any
         myConn:   remote: uses pre-shared key authentication
         myConn:   child:  dynamic === 10.7.0.0/24 TUNNEL, dpdaction=clear
Shunted Connections:
Bypass LAN 10.0.0.0/24:  10.0.0.0/24 === 10.0.0.0/24 PASS
Bypass LAN ::1/128:  ::1/128 === ::1/128 PASS
Bypass LAN fe80::/64:  fe80::/64 === fe80::/64 PASS
Security Associations (1 up, 0 connecting):
         myConn[1]: ESTABLISHED 7 seconds ago, 10.0.0.1[theuser]...83.xxx.xxx.xx[83.xxx.xxx.xx]
         myConn[1]: IKEv1 SPIs: 9ecabd502184611d_i* 1e7f83412c3aa933_r, pre-shared key+XAuth reauthentication in 7 hours
         myConn[1]: IKE proposal: <encryption-hash-diffie-hellman-group>
         myConn{1}:  INSTALLED, TUNNEL, reqid 1, ESP in UDP SPIs: cf636a4c_i 98552ddb_o
         myConn{1}:  <encryption-hash-diffie-hellman-group>, 0 bytes_i, 0 bytes_o, rekeying in 12 minutes
         myConn{1}:   10.0.0.1/32 === 10.7.0.0/24

虽然连接已建立,但我无法连接到http://ourCIserver:8080,这正是我想要实现的目标。

我怀疑我缺少iptablesDNS 中的某些配置。

说到 DNS,FortiClient (Windows) 的配置中有这部分我无法转换为以下格式/etc/ipsec.conf

<use_vip>1</use_vip>
<virtualip>
    <type>dhcpoveripsec</type>
    <ip>0.0.0.0</ip>
    <mask>0.0.0.0</mask>
    <dnsserver>0.0.0.0</dnsserver>
    <winserver>0.0.0.0</winserver>
</virtualip>

系统配置

以下是我认为相关的系统配置;让我知道还有什么要发布的。

iptables-save

# Generated by iptables-save v1.6.1 on Wed Feb 14 16:31:09 2018
*filter
:INPUT ACCEPT [5889:5448467]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [4843:436153]
-A INPUT -s 10.7.0.0/24 -d 10.0.0.1/32 -i wlp3s0 -m policy --dir in --pol ipsec --reqid 1 --proto esp -j ACCEPT
-A OUTPUT -s 10.0.0.1/32 -d 10.7.0.0/24 -o wlp3s0 -m policy --dir out --pol ipsec --reqid 1 --proto esp -j ACCEPT
COMMIT
# Completed on Wed Feb 14 16:31:09 2018

ip route

default via 10.0.0.138 dev wlp3s0 src 10.0.0.1 metric 303 
10.0.0.0/24 dev wlp3s0 proto kernel scope link src 10.0.0.1 metric 303 

ip link

1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN mode DEFAULT group default qlen 1000
    link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00
2: enp2s0: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
    link/ether 00:1e:33:a8:53:c6 brd ff:ff:ff:ff:ff:ff
3: wlp3s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP mode DORMANT group default qlen 1000
    link/ether 00:22:fa:91:3e:02 brd ff:ff:ff:ff:ff:ff

sudo ip xfrm policy

src 10.0.0.1/32 dst 10.7.0.0/24 
        dir out priority 371327 
        tmpl src 10.0.0.1 dst 83.xxx.xxx.xx
                proto esp spi 0x98552dde reqid 1 mode tunnel
src 10.7.0.0/24 dst 10.0.0.1/32 
        dir fwd priority 371327 
        tmpl src 83.xxx.xxx.xx dst 10.0.0.1
                proto esp reqid 1 mode tunnel
src 10.7.0.0/24 dst 10.0.0.1/32 
        dir in priority 371327 
        tmpl src 83.xxx.xxx.xx dst 10.0.0.1
                proto esp reqid 1 mode tunnel
src fe80::/64 dst fe80::/64 
        dir fwd priority 134463 
src fe80::/64 dst fe80::/64 
        dir in priority 134463 
src fe80::/64 dst fe80::/64 
        dir out priority 134463 
src ::1/128 dst ::1/128 
        dir fwd priority 68927 
src ::1/128 dst ::1/128 
        dir in priority 68927 
src ::1/128 dst ::1/128 
        dir out priority 68927 
src 10.0.0.0/24 dst 10.0.0.0/24 
        dir fwd priority 175423 
src 10.0.0.0/24 dst 10.0.0.0/24 
        dir in priority 175423 
src 10.0.0.0/24 dst 10.0.0.0/24 
        dir out priority 175423 
src 0.0.0.0/0 dst 0.0.0.0/0 
        socket in priority 0 
src 0.0.0.0/0 dst 0.0.0.0/0 
        socket out priority 0 
src 0.0.0.0/0 dst 0.0.0.0/0 
        socket in priority 0 
src 0.0.0.0/0 dst 0.0.0.0/0 
        socket out priority 0 
src ::/0 dst ::/0 
        socket in priority 0 
src ::/0 dst ::/0 
        socket out priority 0 
src ::/0 dst ::/0 
        socket in priority 0 
src ::/0 dst ::/0 
        socket out priority 0 

/etc/ipsec.conf

config setup
  charondebug = "dmn 1, mgr 1, ike 2, chd 1, job 1, cfg 3, knl 2, net 2, enc 1, lib 1"

conn myConn
  keyexchange = ikev1

  ike = <encryption-hash-diffie-hellman-group>
  esp = <encryption-hash-diffie-hellman-group>

  aggressive = yes

  ikelifetime = 28800s

  right = 83.xxx.xxx.xx
  #right = vpn.the-vpn-server.com
  rightsubnet = 10.7.0.0/24
  rightid = %any
  rightauth = psk
  rightdns = 0.0.0.0,8.8.8.8,8.8.4.4

  left = %defaultroute
  leftauth = psk
  leftauth2 = xauth
  xauth_identity = "theuser"

  auto = start

/etc/ipsec.secrets

# ipsec.secrets - strongSwan IPsec secrets file
: PSK "secret_preshared_key"
: XAUTH "secret_xauth_password"

无需 DNS 即可连接✔️

根据用户 roaima 的建议,我通过 IP 地址联系了 CI 服务器:http://10.7.0.50:8080/

从以下位置删除这部分后,无 DNS 工作就成功了/etc/ipsec.conf

lifebytes = 5120

lifebytes使安全关联在传输一定数量的字节后过期。在我的情况下,客户端和服务器无法重新连接。

在日志中,由导致的过期lifebytes显示为

[KNL] received a XFRM_MSG_EXPIRE

我现在可以通过下载 CI 服务器仪表板的 HTML wget -O- --header 'Host: ourCIserver' 10.7.0.50:8080/

更有用的是,Firefox 可以使用 IP 地址连接到 CI 服务器并呈现该 HTML。

这意味着连接现在可以工作并允许 HTTP 流量,这是个好消息。

与 DNS 连接

我添加了

rightdns = 0.0.0.0,8.8.8.8,8.8.4.4

但失败/etc/ipsec.confping ourCIserver

Name or service not known

还没有运气traceroute ourCIserver

ourCIserver: Name or service not known
Cannot handle "host" cmdline arg `ourCIserver' on position 1 (argc 1)

这是 Windows 上 FortiClient 的 DNS 相关配置,其中 DNS 起作用:

<virtualip>
    <type>dhcpoveripsec</type>
    <ip>0.0.0.0</ip>
    <mask>0.0.0.0</mask>
    <dnsserver>0.0.0.0</dnsserver>
    <winserver>0.0.0.0</winserver>
</virtualip>

我可以通过在 中提供 IP/主机映射来解决 DNS 问题/etc/hosts,但当然最好使用隧道另一端的服务器来获取 DNS。

#<ip-address>   <hostname.domain.org>   <hostname>
10.7.0.50       ourCIserver             ourCIserver

结论

我可以使用/etc/ipsec.conf上面的内容连接到 VPN。 DNS 不起作用,但对我来说没关系。

我已经蒸馏了一个答案从这些努力中,对于那些想要使用 StrongSwan 连接到 FortiGate 的人来说。

答案1

我有写博客当我最后需要它的时候。主要技巧是 Fortinet 需要激进模式,因此配置参数需要从一开始就紧密匹配。

作为参考,我的配置是

conn fortinet
    left=%any
    leftauth=psk
    leftid=""
    leftauth2=xauth
    xauth_identity="your username"
    leftsourceip=%config
    right=gateway IP address
    rightsubnet=VPN subnet
    rightauth=psk
    keyexchange=ikev1
    aggressive=yes
    ike=aes128-sha1-modp1536!
    esp=aes128-sha1-modp1536!
    auto=add

您还需要配置 PSK 和 XAUTH 密钥。

这是 2016 年,因此 ike 和 esp 模式可能已更新为使用更长的密钥 - 请注意,我为每个模式强制执行特定的密码。

相关内容