VPN
获取Endpoint
在确认您使用SDK时配置的Endpoint时,可先阅读开发人员指南中关于VPC服务域名的部分,理解Endpoint相关的概念。 百度智能云目前开放了多区域支持,请参考区域选择说明中网络产品VPC的部分。
注意: VPN API支持HTTP和HTTPS两种调用方式。为了提升数据的安全性,建议通过HTTPS调用
获取AK/SK
要使用百度智能云子网,您需要拥有一个有效的 AK(Access Key ID)和SK(Secret Access Key)用来进行签名认证。AK/SK是由系统分配给用户的,均为字符串,用于标识用户,为访问服务做签名验证。 可以通过如下步骤获得并了解您的AK/SK信息:
新建VpnClient
VpnClient是Subnet服务的客户端,为开发者与VPN服务进行交互提供了一系列的方法。 新建Vpn时,需要先使用Endpoint、AK、SK对BceClientConfigurationl类型的config实例进行配置,再使用config实例对VpnClient进行配置,具体配置方法如下:
from baidubce.auth.bce_credentials import BceCredentials
from baidubce.bce_client_configuration import BceClientConfiguration
from baidubce.services.vpn.vpn_client import VpnClient
if __name__ == "__main__":
config = BceClientConfiguration(
credentials=BceCredentials(
access_key_id='', # 用户的ak
secret_access_key='' # 用户的sk
),
endpoint='bcc.bj.baidubce.com' # 请求的域名信息
)
vpn_client = VpnClient(config)
创建VPN网关
函数声明
def create_vpn(self, vpc_id, vpn_name, billing,
vpn_type=None, max_connections=None,
client_token=None, description=None, eip=None, config=None)
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/tk2y913ko
返回值
操作成功:
{
"vpnId": "vpn-ku4cxya6nisq"
}
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7
代码示例
具体代码示例参考:example_create_vpn.py
创建vpn网关是一个异步操作,create_vpn执行完成返回后,不代表vpn网关创建成功,此时vpn的状态是『building』,需要等待不超3分钟,待vpn网关的状态变更为『unconfigured』以后才能够继续配置该vpn。
列举VPN网关
函数声明
def list_vpns(self, vpc_id, eip=None, marker=None, max_Keys=None, config=None):
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/zk2ydcivt
返回值
操作成功:
{
"nextMarker": "vpn-xktdeMSf",
"marker": "vpn-IyWRtII7",
"maxKeys": 1,
"isTruncated": true,
"vpns": [
{
"status": "active",
"eip": "10.12.34.32",
"vpnId": "vpn-IyWRtII7",
"vpcId": "83edd0d2-8a68-4ce5-a396-9d2917d58a57",
"description": "",
"expiredTime": null,
"productType": "postpay",
"vpnConnNum": 0,
"bandwidthInMbps": 10,
"vpnConns": [],
"vpnName": "VPN_aoko_2",
"createTime": "2021-04-25 17:22:34"
}
]
}
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7
代码示例
具体代码示例参考:example_list_vpn.py
VPN网关绑定EIP
只有未绑定eip,状态为unconfigured的vpn才能执行eip的绑定操作
函数声明
def bind_eip(self, vpn_id, eip=None, client_token=None, config=None):
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/uk2yh2wy2
返回值
操作成功:
无返回值
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7
代码示例
具体代码示例参考:example_bind_vpn_eip.py
VPN网关解绑EIP
只有绑定了EIP的vpn网关才能执行该操作
函数声明
def unbind_eip(self, vpn_id, client_token=None, config=None):
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/lk2yh59e5
返回值
操作成功:
无返回值
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7
代码示例
具体代码示例参考:example_unbind_vpn_eip.py
修改VPN网关
vpn网关目前只能修改name和description, 其他参数不允许修改
函数声明
def update_vpn(self, vpn_id, vpn_name=None, description=None, client_token=None, config=None):
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/dk2ybo3p4
返回值
操作成功:
无返回值
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7
代码示例
具体代码示例参考:example_update_vpn.py
释放VPN网关
如果是IPSEC-VPN网关,则需要先删除VPN网关下的IPSEC隧道 如果是SSL-VPN网关,则需要先删除VPN网关下的sslvpn服务 如果vpn网关绑定了eip,则会先解除vpn和eip的绑定关系,eip会变成可用状态。 只允许释放支付类型为后付费,且无计费变更任务的VPN实例
函数声明
def delete_vpn(self, vpn_id, client_token=None, config=None):
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/bk2ybhrpv
返回值
操作成功:
无返回值
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7
代码示例
具体代码示例参考:example_delete_vpn.py
创建IPSEC隧道
创建IPSEC隧道所需要的参数比较多,isakmp两个阶段的密钥协商参数,根据协议规范,分为ike的加密认证算法和ipsec的加密认证算法。
sdk支持且仅支持策略模式(基于感兴趣流)的ipsec隧道。
IKE配置定义
ike配置参数含义参考:IkeConfig
IKE配置参数含义
参数名称 | 类型 | 是否必须 | 描述 |
---|---|---|---|
ike_version | string | 是 | ike的版本,v1 or v2 |
ike_mode | string | 是 | ike的模式。main:主模式;野蛮模式:aggressive |
ike_enc_alg | string | 是 | 一阶段加密算法, aes/aes192/aes256/3des |
ike_auth_alg | string | 否 | 一阶段认证算法,sha1/md5 |
ike_pfs | string | 是 | DH Group,Diffie-Hellman算法强度,选项有group2/group5/group14/group24 |
ike_lifeTime | string | 否 | ike隧道的生命周期,3600的整数倍,最大86400 |
IPSEC配置定义
ipsec配置参数含义参考:IpsecConfig
IPSEC配置参数含义
参数名称 | 类型 | 是否必须 | 描述 |
---|---|---|---|
ipsec_enc_alg | string | 是 | 二阶段的加密算法,aes/aes192/aes256/3des |
ipsec_auth_alg | string | 是 | 二阶段的认证算法,sha1/md5 |
ipsec_pfs | string | 否 | pfs,前向安全性 group2/group5/group14/group24 |
ipsec_lifetime | string | 否 | 二阶段声明周期,3600整数倍,不小于ike_lifeTime |
函数声明
def create_vpn_conn(self, vpn_id,
secret_key,
local_subnets,
remote_ip,
remote_subnets,
vpn_conn_name,
ike_config,
ipsec_config,
description=None,
client_token=None, config=None):
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/sk2yngg0t
返回值
操作成功:
{
"vpnConnId": "vpnconn-ku4cxya6nisq"
}
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7
代码示例
具体代码示例参考:example_create_connection.py
列举IPSEC
函数声明
def get_vpn_conn(self, vpn_id, client_token=None, config=None):
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/Bk2ynne1n
返回值
操作成功:
{
"vpnConns": [
{
"secretKey": "ddd22@www",
"localSubnets": ["192.168.100.0/24"],
"remoteIp": "10.107.245.188",
"remoteSubnets": ["192.168.100.0/24"],
"description": "111",
"vpnConnName": "vpncon",
"ikeConfig":
{
"ikeVersion": "v1",
"ikeMode": "main",
"ikeEncAlg": "aes",
"ikeAuthAlg": "sha1",
"ikePfs": "group2",
"ikeVersion": "v1"
},
"ipsecConfig":
{
"ipsecEncAlg": "aes",
"ipsecAuthAlg": "sha1",
"ipsecPfs": "group2",
"ipsecLifetime": "28800s"
}
}
]
}
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7
代码示例
具体代码示例参考:example_list_connection.py
修改IPSEC隧道
IPSEC隧道的参数修改,和创建请求一样,同样需要定义ike和ipsec等两个阶段的参数以及感兴趣流等。ipsec隧道的修改sdk无法针对单个参数,需要将所有的参数都传入。具体内容如下。
函数声明
def update_vpn_conn(self, vpn_conn_id,
vpn_id,
secret_key,
local_subnets,
remote_ip,
remote_subnets,
vpn_conn_name,
ike_config,
ipsec_config,
description=None,
client_token=None, config=None):
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/rk2ynjopp
返回值
操作成功:
无返回值
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7
代码示例
具体代码示例参考:example_update_connection.py
删除IPSEC隧道
函数声明
def delete_vpn_conn(self, vpn_conn_id, client_token=None, config=None):
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/dk2ynpyn7
返回值
操作成功:
无返回值
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7
代码示例
具体代码示例参考:example_delete_connection.py
创建SSLVPN服务
使用该接口前,请确认vpc下已经成功创建了ssl-vpn网关,一个ssl-vpn网关下只能创建一个sslvpn服务。
函数声明
def create_vpn_sslservice(self, vpn_id=None,
sslservice_name=None,
local_routes=None,
address_pool=None,
interface_type=None,
client_dns=None,
client_token=None, config=None):
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/Jl385fe3r
返回值
操作成功:
{
"sslVpnServerId": "sslvpn-5b2hq4nm40tt"
}
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7
代码示例
具体代码示例参考:example_create_sslservice.py
列举SSLVPN服务
因为一个VPN网关下只能有一个SSLVPN服务,所以使用vpn_id列举ssl-vpn服务,最多只能列举出一个ssl-vpn服务
函数声明
def get_vpn_sslservice(self, vpn_id, client_token=None, config=None):
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/vl3bat97z
返回值
操作成功:
{
"vpnId": "vpn-shyt1vzgqc3z",
"sslVpnServerId": "sslvpn-5b2hq4nm40tt",
"sslVpnServerName": "hzb_1_1",
"interfaceType": "tap",
"status": "active",
"localSubnets": ["192.168.0.0/24"],
"remoteSubnet": "172.168.0.0/16",
"maxConnection": 10,
"clientDns":""
}
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7
代码示例
具体代码示例参考:example_list_sslservice.py
修改ssl-vpn服务
修改ssl-vpn服务会出发处于连接状态的客户端与vpn网关之间的连接断开,百度云提供的windows和mac客户端,会在大约三分钟内检测到ssl-vpn断开,然后自动重连。linux客户端则不会重连,需要相关工程师将linux上的客户端重启或者重连。所以该操作需要谨慎。
sslvpn的interface_type禁止修改,因为该参数在客户端的配置文件中也需要声明,该参数一旦被修改,需要所有的客户端配置文件同步修改。修改其他参数,比如说客户端路由,客户端地址池等,只需要客户端断开重连即可。所以interface_type禁止修改。
函数声明
def update_vpn_sslservice(self, vpn_id=None,
sslservice_id=None,
sslservice_name=None,
local_routes=None,
address_pool=None,
client_dns=None,
client_token=None, config=None):
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/Gl39u2j5r
返回值
操作成功:
无返回值
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7
代码示例
具体代码示例参考:example_update_sslservice.py
删除SSL-VPN服务
函数声明
def delete_vpn_sslservice(self, vpn_id, sslservice_id, client_token=None, config=None):
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/ll39xiyyp
返回值
操作成功:
无返回值
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7
代码示例
具体代码示例参考:example_delete_sslservice.py
批量创建SSL-VPN用户
函数声明
def create_vpn_sslusers(self, vpn_id, sslusers, client_token=None, config=None)
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/Kl3a3l8ga
返回值
操作成功:
{
"sslVpnUserIds":["sslvpn-5b2hq4nm40tt"]
}
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7
代码示例
具体代码示例参考:example_create_ssluser.py
列举ssl-vpn用户
函数声明
def get_vpn_ssl_user(self, vpn_id, client_token=None, config=None):
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/Sl3b9pzmg
返回值
操作成功:
{
"marker": "vpn-ssl-user-xynkefqf3n5x",
"maxKeys": 1,
"isTruncated": false,
"sslVpnUsers": [
{
"userId": "vpn-ssl-user-xynkefqf3n5x",
"userName": "user",
"description": "desc"
}
]
}
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7
代码示例
具体代码示例参考:example_list_ssluser.py
修改ssl-vpn用户
函数声明
def update_vpn_ssl_user(self, vpn_id, ssluser_id, password=None, description=None, client_token=None, config=None):
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/el3b86jjt
返回值
操作成功:
无返回值
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7
代码示例
具体代码示例参考:example_update_ssluser.py
删除ssl-vpn用户
ssl-vpn用户删除以后,如果该用户已经和sslvpn建立了连接,正在正常使用,不会直接断开该连接。会在下次连接时,返回认证失败信息。
函数声明
def delete_vpn_ssl_user(self, vpn_id, ssluser_id, client_token=None, config=None):
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/Wl3b99ax6
返回值
操作成功:
无返回值
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7
代码示例
具体代码示例参考:example_delete_ssluser.py