Linux (MacOS) 使用openconnect连接GlobalProtect SSL VPN网络

春衣少年当酒歌,起舞四顾以笑和。这篇文章主要讲述Linux (MacOS) 使用openconnect连接GlobalProtect SSL VPN网络相关的知识,希望能为你提供帮助。
  GlobalProtect提供的客户端有windows版本和macOS版本,但没有linux版本。本文以debian 10为例通过安装openconnect实现命令行连接(debian 10对应 ubuntu 18.04)。
1、安装openconnect  (8.0+的版本才支持gp协议)

??    ????sudo apt install openconnect??
centos7需要先安装epel源,再安装openconnect
macos需要先安装Homebrew,然后通过brew安装openconnect
2、创建配置文件
cat /etc/openconnect/gp.conf
??cat /etc/openconnect/gp.conf??


??background??
??os=linux-????64??
??protocol=gp??
??useragent=????OpenConnect VPN Agent for Debian Linux-64??
??script=/usr/share/vpnc-scripts/vpnc-script??
??passwd-on-stdin??
??pid-file=/????var????/run/gp.pid??
??syslog??
??verbose??
??user=$< VPN_USER> #自行替换??


3、连接
??sudo openconnect --config=/etc/openconnect/gp.conf  vpn.domain.io  #自行替换接入域名,输入PASSWORD后即可连接。??


4、完善
由于公司VPN连接成功后会更改默认路由,所有流量都会经过VPN,出口IP会变成办公网络的出口IP。如果linux机器是公有云服务器,比如阿里云ECS,由于默认路由的变更,会导致无法通过ssh连接。
针对默认路由的变更做如下操作:再连接前记录默认路由网关和网卡设备,连接后再改回来。连接脚本及相关配置如下:
连接脚本
??cat vpn-gp.sh??


??#!/bin/bash??
??export GET_STAT_NET_GW=$(ip route list|grep  ????default????|head -n  ????1????|awk  ????print $3????)??
??export GET_STAT_NET_DEV=$(ip route list|grep  ????default????|head -n  ????1????|awk  ????print $NF????)??
??USERNAME=$< vpn_user_name> #自行替换??
??PASSWORD=$< vpn_user_password>   #自行替换??
??CFGPATH=/etc/openconnect??
??sudo openconnect \\??
??--config=$CFGPATH/gp.conf \\??
??--user=$USERNAME \\??
??--passwd-on-stdin < < <   ????"$PASSWORD"???  ??\\??
??vpn.domain.io    #自行替换VPN接入域名??   
??sudo bash $CGPATH/change_route.sh  #如果不需要更改默认路由,可将此行注释??




配置文件
??cat /etc/openconnect/gp.conf??


??background??
??os=linux-????64??
??protocol=gp??
??useragent=????OpenConnect VPN Agent for Debian Linux-64??
??script=/usr/share/vpnc-scripts/vpnc-script??
??pid-file=/????var????/run/gp.pid??
??syslog??
??verbose??


更新默认路由


??cat /etc/openconnect/change_route.sh??


??#!/bin/bash??
??for???  ??C in ????1????..????60??????
??do??
??  if???  ??[ -z  ????"$(ip route list|grep 100.100.|awk print $1)"???  ??] ;   then  #根据VPN实际IP替换100.100.??
??      sleep  ????1??
??      continue??
??  else??
??      break??
??  fi??
??done??
??sleep  ????1??
??TUNDEV=$(ip route list|grep  ????100.100????|head -n  ????1????|awk  ????print $3????)??
??route del  ????default???  ??dev $TUNDEV??
??sudo ip route add  ????default???  ??gw $GET_STAT_NET_GW dev $GET_STAT_NET_DEV??
??#改完默认路由后,需要手动添加办公网络可访问的内部服务和办公网络路由:??


??route add -host  ????10.20.30.40???      ??dev $TUNDEV??
??route add -host  ????10.20.40.0/24???      ??dev $TUNDEV??


  以下连接脚本和配置适用于MacOS(已在macOS Big Sur 11.6.2验证):


连接脚本:
??cat ~/bin/vpn-gp.sh??


??#!/bin/bash??
??export GET_STAT_NET_GW=$(ip route list|grep  ????default????|head -n  ????1????|awk  ????print $3????)??
??export GET_STAT_NET_DEV=$(ip route list|grep  ????default????|head -n  ????1????|awk  ????print $NF????)??
??USERNAME=$< vpn_user_name> #自行替换??
??PASSWORD=$< vpn_user_password>   #自行替换??
??CFGPATH=/usr/local/etc/openconnect??
??sudo openconnect \\??
??--config=$CFGPATH/gp.conf \\??
??--printcookie \\??
??-vvvv \\ ??
??--user=$USERNAME??
??--passwd-on-stdin < < <   ????"$PASSWORD"??
??vpn.domain.io    #自行替换vpn接入域名??
??sleep  ????1??
??sudo bash /usr/local/etc/openconnect/change_route.sh  ??




openconnect for mac 配置文件
??cat  /usr/local/etc/openconnect/gp.conf??


??background??
??os=mac-intel??
??protocol=gp??
??useragent=????OpenConnect VPN Agent for MacOS?
??script=/usr/local/etc/vpnc-script??
??#passwd-on-stdin??
??pid-file=/usr/local/????var????/run/gp.pid  ??
??syslog??
??verbose??




路由更新脚本
??cat  /usr/local/etc/openconnect/change_route.sh  ??


??#!/bin/bash??
??for???  ??C in ????1????..????60??????
??do  ??
??  if???  ??[ -z  ????"$(ip route list|grep 100.100.|awk print $1)"???  ??] ;   then  #根据VPN实际IP网段替换100.100.  ??
??    sleep  ????1??
??    continue??
??  else?
??    break??
??  fi??
??done??
??sleep  ????1??
??TUNDEV=$(ip route list|grep  ????100.100????|grep -v  ????default????|head -n  ????1????|awk  ????print $3????)??
??sudo ip route del    ????0.0.0.0????/????0???  ??dev $TUNDEV??
??sudo ip route add  ????default???  ??gw $GET_STAT_NET_GW??


??#添加办公网络可访问的服务路由??
??sudo ip route add  ????10.20.30.40???      ??dev $TUNDEV??
??sudo ip route add  ????10.20.40.0/24???      ??dev $TUNDEV??




【Linux (MacOS) 使用openconnect连接GlobalProtect SSL VPN网络】


    推荐阅读