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

Posted 天地一沙鸥

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了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网络的主要内容,如果未能解决你的问题,请参考以下文章

放弃使用 15 年的 macOS,我决定换成 Linux!

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

强制 docker 在 macOS 上默认使用 linux/amd64 平台

markdown 使用nvm为Linux和macOS安装Node.js.

使用 nix-shell 或 nix shell 在 Linux 64 上运行 MacOS sed

Linux和MacOS都能用的Unix命令,你了解吗?