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进行配置,具体配置方法如下:
1from baidubce.auth.bce_credentials import BceCredentials
2from baidubce.bce_client_configuration import BceClientConfiguration
3from baidubce.services.vpn.vpn_client import VpnClient
4if __name__ == "__main__":
5 config = BceClientConfiguration(
6 credentials=BceCredentials(
7 access_key_id='', # 用户的ak
8 secret_access_key='' # 用户的sk
9 ),
10 endpoint='bcc.bj.baidubce.com' # 请求的域名信息
11 )
12 vpn_client = VpnClient(config)
创建VPN网关
函数声明
1def create_vpn(self, vpc_id, vpn_name, billing,
2 vpn_type=None, max_connections=None,
3 client_token=None, description=None,
4 eip=None, config=None, subnetId=None,
5 tags=None, resourceGroupId=None, deleteProtect=False):
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/tk2y913ko
返回值
操作成功:
1{
2 "metadata": {...}, # 公共描述信息
3 "vpnId": "vpn-ku4cxya6nisq"
4}
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7
代码示例
具体代码示例参考:example_create_vpn.py
创建vpn网关是一个异步操作,create_vpn执行完成返回后,不代表vpn网关创建成功,此时vpn的状态是『building』,需要等待不超3分钟,待vpn网关的状态变更为『unconfigured』以后才能够继续配置该vpn。
列举VPN网关
函数声明
1def list_vpns(self, vpc_id, eip=None, marker=None, max_Keys=None, config=None, vpn_type=None):
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/zk2ydcivt
返回值
操作成功:
1{
2 "metadata": {...}, # 公共描述信息
3 "nextMarker": "vpn-xktdeMSf",
4 "marker": "vpn-IyWRtII7",
5 "maxKeys": 1,
6 "isTruncated": true,
7 "vpns": [
8 {
9 "status": "active",
10 "eip": "10.12.34.32",
11 "vpnId": "vpn-IyWRtII7",
12 "vpcId": "83edd0d2-8a68-4ce5-a396-9d2917d58a57",
13 "description": "",
14 "expiredTime": null,
15 "productType": "postpay",
16 "vpnConnNum": 0,
17 "bandwidthInMbps": 10,
18 "vpnConns": [],
19 "sslVpnServer": null,
20 "type": "IPSec",
21 "maxConnection": null,
22 "vpnName": "VPN_aoko_2",
23 "createTime": "2021-04-25 17:22:34"
24 }
25 ]
26}
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7
代码示例
具体代码示例参考:example_list_vpn.py
查询VPN详情
函数声明
1def get_vpn(self, vpn_id, config=None):
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/Xk2ydminh
返回值
操作成功:
1{
2 "metadata": {...}, # 公共描述信息
3 "status": "active",
4 "eip": "",
5 "vpnId": "vpn-shkgan7et1vx",
6 "vpcId": "83edd0d2-8a68-4ce5-a396-9d2917d58a57",
7 "description": "",
8 "expiredTime": null,
9 "paymentTiming": "Postpaid",
10 "vpnConnNum": 0,
11 "bandwidthInMbps": 0,
12 "vpnConns": [],
13 "ssl_vpn_server": null,
14 "vpnName": "VPN_aoko_2",
15 "createTime": "2021-04-25 17:22:34",
16 "deleteProtect": true,
17 "tags": [
18 {
19 "tagKey": "hikwnf",
20 "tagValue": "nwklwmflk"
21 },
22 {
23 "tagKey": "whfooef",
24 "tagValue": "haiwnwejf"
25 }
26 ]
27}
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7
代码示例
具体代码示例参考:example_show_vpn.py
VPN网关绑定EIP
只有未绑定eip,状态为unconfigured的vpn才能执行eip的绑定操作
函数声明
1def bind_eip(self, vpn_id, eip=None, client_token=None, config=None):
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/uk2yh2wy2
返回值
操作成功:
1{
2 "metadata": {...} # 公共描述信息
3}
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7
代码示例
具体代码示例参考:example_bind_vpn_eip.py
VPN网关解绑EIP
只有绑定了EIP的vpn网关才能执行该操作
函数声明
1def unbind_eip(self, vpn_id, client_token=None, config=None):
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/lk2yh59e5
返回值
操作成功:
1{
2 "metadata": {...} # 公共描述信息
3}
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7
代码示例
具体代码示例参考:example_unbind_vpn_eip.py
修改VPN网关
vpn网关目前只能修改name和description, 其他参数不允许修改
函数声明
1def update_vpn(self, vpn_id, vpn_name=None, description=None, client_token=None, config=None):
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/dk2ybo3p4
返回值
操作成功:
1{
2 "metadata": {...} # 公共描述信息
3}
操作失败:
抛出异常,异常列表参考: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实例
函数声明
1def delete_vpn(self, vpn_id, client_token=None, config=None):
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/bk2ybhrpv
返回值
操作成功:
1{
2 "metadata": {...} # 公共描述信息
3}
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7
代码示例
具体代码示例参考:example_delete_vpn.py
VPN网关续费
函数声明
1def renew_vpn(self, vpn_id, billing, client_token=None, config=None):
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/rk2yh7kqp
返回值
操作成功:
1{
2 "metadata": {...} # 公共描述信息
3}
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7
代码示例
具体代码示例参考:example_renew_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 |
函数声明
1def create_vpn_conn(self, vpn_id,
2 secret_key,
3 local_subnets,
4 remote_ip,
5 remote_subnets,
6 vpn_conn_name,
7 ike_config,
8 ipsec_config,
9 description=None,
10 client_token=None, config=None):
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/sk2yngg0t
返回值
操作成功:
1{
2 "metadata": {...}, # 公共描述信息
3 "vpnConnId": "vpnconn-ku4cxya6nisq"
4}
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7
代码示例
具体代码示例参考:example_create_connection.py
列举IPSEC
函数声明
1def get_vpn_conn(self, vpn_id, client_token=None, config=None):
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/Bk2ynne1n
返回值
操作成功:
1{
2 "metadata": {...}, # 公共描述信息
3 "vpnConns": [
4 {
5 "vpn_id": "vpn-a0314a79a558",
6 "vpn_conn_id": "vpnconn-771763a0da2f",
7 "secretKey": "ddd22@www",
8 "local_ip": null,
9 "localSubnets": ["192.168.100.0/24"],
10 "remoteIp": "10.107.245.188",
11 "remoteSubnets": ["192.168.100.0/24"],
12 "description": "111",
13 "status": "active",
14 "created_time": "2024-12-26T18:58:53+08:00",
15 "health_status": "reachable"
16 "vpnConnName": "vpncon",
17 "ikeConfig":
18 {
19 "ikeVersion": "v1",
20 "ikeMode": "main",
21 "ikeEncAlg": "aes",
22 "ikeAuthAlg": "sha1",
23 "ikePfs": "group2",
24 "ikeLifeTime": "28800s"
25 },
26 "ipsecConfig":
27 {
28 "ipsecEncAlg": "aes",
29 "ipsecAuthAlg": "sha1",
30 "ipsecPfs": "group2",
31 "ipsecLifetime": "28800s"
32 }
33 }
34 ]
35}
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7
代码示例
具体代码示例参考:example_list_connection.py
修改IPSEC隧道
IPSEC隧道的参数修改,和创建请求一样,同样需要定义ike和ipsec等两个阶段的参数以及感兴趣流等。ipsec隧道的修改sdk无法针对单个参数,需要将所有的参数都传入。具体内容如下。
函数声明
1def update_vpn_conn(self, vpn_conn_id,
2 vpn_id,
3 secret_key,
4 local_subnets,
5 remote_ip,
6 remote_subnets,
7 vpn_conn_name,
8 ike_config,
9 ipsec_config,
10 description=None,
11 client_token=None, config=None):
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/rk2ynjopp
返回值
操作成功:
1{
2 "metadata": {...} # 公共描述信息
3}
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7
代码示例
具体代码示例参考:example_update_connection.py
删除IPSEC隧道
函数声明
1def delete_vpn_conn(self, vpn_conn_id, client_token=None, config=None):
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/dk2ynpyn7
返回值
操作成功:
1{
2 "metadata": {...} # 公共描述信息
3}
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7
代码示例
具体代码示例参考:example_delete_connection.py
创建SSLVPN服务
使用该接口前,请确认vpc下已经成功创建了ssl-vpn网关,一个ssl-vpn网关下只能创建一个sslvpn服务。
函数声明
1def create_vpn_sslservice(self, vpn_id=None,
2 sslservice_name=None,
3 local_routes=None,
4 address_pool=None,
5 interface_type=None,
6 client_dns=None,
7 client_token=None, config=None):
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/Jl385fe3r
返回值
操作成功:
1{
2 "metadata": {...}, # 公共描述信息
3 "sslVpnServerId": "sslvpn-5b2hq4nm40tt"
4}
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7
代码示例
具体代码示例参考:example_create_sslservice.py
列举SSLVPN服务
因为一个VPN网关下只能有一个SSLVPN服务,所以使用vpn_id列举ssl-vpn服务,最多只能列举出一个ssl-vpn服务
函数声明
1def get_vpn_sslservice(self, vpn_id, client_token=None, config=None):
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/vl3bat97z
返回值
操作成功:
1{
2 "metadata": {...}, # 公共描述信息
3 "vpnId": "vpn-shyt1vzgqc3z",
4 "sslVpnServerId": "sslvpn-5b2hq4nm40tt",
5 "sslVpnServerName": "hzb_1_1",
6 "interfaceType": "tap",
7 "status": "active",
8 "localSubnets": ["192.168.0.0/24"],
9 "remoteSubnet": "172.168.0.0/16",
10 "maxConnection": 10,
11 "clientDns":""
12 }
操作失败:
抛出异常,异常列表参考: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禁止修改。
函数声明
1def update_vpn_sslservice(self, vpn_id=None,
2 sslservice_id=None,
3 sslservice_name=None,
4 local_routes=None,
5 address_pool=None,
6 client_dns=None,
7 client_token=None, config=None):
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/Gl39u2j5r
返回值
操作成功:
1{
2 "metadata": {...} # 公共描述信息
3}
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7
代码示例
具体代码示例参考:example_update_sslservice.py
删除SSL-VPN服务
函数声明
1def delete_vpn_sslservice(self, vpn_id, sslservice_id, client_token=None, config=None):
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/ll39xiyyp
返回值
操作成功:
1{
2 "metadata": {...} # 公共描述信息
3}
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7
代码示例
具体代码示例参考:example_delete_sslservice.py
批量创建SSL-VPN用户
函数声明
1def create_vpn_sslusers(self, vpn_id, sslusers, client_token=None, config=None)
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/Kl3a3l8ga
返回值
操作成功:
1{
2 "metadata": {...}, # 公共描述信息
3 "sslVpnUserIds":["sslvpn-5b2hq4nm40tt"]
4}
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7
代码示例
具体代码示例参考:example_create_ssluser.py
列举ssl-vpn用户
函数声明
1def get_vpn_ssl_user(self, vpn_id, client_token=None, config=None, marker=None, max_keys=None, user_name=None):
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/Sl3b9pzmg
返回值
操作成功:
1{
2 "metadata": {...}, # 公共描述信息
3 "marker": "vpn-ssl-user-xynkefqf3n5x",
4 "maxKeys": 1,
5 "isTruncated": false,
6 "sslVpnUsers": [
7 {
8 "userId": "vpn-ssl-user-xynkefqf3n5x",
9 "userName": "user",
10 "description": "desc"
11 }
12 ]
13}
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7
代码示例
具体代码示例参考:example_list_ssluser.py
修改ssl-vpn用户
函数声明
1def 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
返回值
操作成功:
1{
2 "metadata": {...} # 公共描述信息
3}
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7
代码示例
具体代码示例参考:example_update_ssluser.py
删除ssl-vpn用户
ssl-vpn用户删除以后,如果该用户已经和sslvpn建立了连接,正在正常使用,不会直接断开该连接。会在下次连接时,返回认证失败信息。
函数声明
1def delete_vpn_ssl_user(self, vpn_id, ssluser_id, client_token=None, config=None):
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/Wl3b99ax6
返回值
操作成功:
1{
2 "metadata": {...} # 公共描述信息
3}
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7
代码示例
具体代码示例参考:example_delete_ssluser.py
更新VPN释放保护开关
函数声明
1def update_vpn_delete_protect(self, vpn_id, delete_protect=False, client_token=None, config=None):
参数含义
请参考OpenAPI文档:https://cloud.baidu.com/doc/VPC/s/Dlzjsmzon
返回值
操作成功:
1{
2 "metadata": {...} # 公共描述信息
3}
操作失败:
抛出异常,异常列表参考:https://cloud.baidu.com/doc/VPC/s/sjwvyuhe7
代码示例
具体代码示例参考:example_update_vpn_delete_protect.py