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
