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

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

公司GlobalProtect提供的vpn客户端有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

background
os=linux-64
protocol=gp
useragent='GlobalProtect (unknown version) CFNetwork/1240.0.4 Darwin/20.6.0'  #抓包获取到的mac客户端UA
script=/usr/share/vpnc-scripts/vpnc-script
passwd-on-stdin
pid-file=/var/run/gp.pid
syslog
verbose
user=$ #自行替换

3、连接

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

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 $5}')
USERNAME=$ #自行替换
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='GlobalProtect (unknown version) CFNetwork/1240.0.4 Darwin/20.6.0' #抓包获取到的mac客户端UA
script=/usr/share/vpnc-scripts/vpnc-script
pid-file=/var/run/gp.pid
syslog
verbose

更新路由 (macOS需要先通过brew 安装 iproute2mac 才能使用ip route)

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验证):

openconnect for macOS 连接脚本:

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=$ #自行替换
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 macOS 配置文件

cat  /usr/local/etc/openconnect/gp.conf

background
os=mac-intel
protocol=gp
useragent='GlobalProtect (unknown version) CFNetwork/1240.0.4 Darwin/20.6.0'  #抓包获取到的mac客户端的UA
script=/usr/local/etc/vpnc-script
#passwd-on-stdin
pid-file=/usr/local/var/run/gp.pid 
syslog
verbose

openconnect for macOS 路由更新脚本 (需要先通brew 安装iproute2mac):

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网络)