建立 VPN 伺服器
建立 VPN 伺服器,以容許來自網際網路的用戶端連接至 VPC 網路,同時維護安全連線功能。
您可以使用主控台、CLI、API 或 Terraform 建立 VPN 伺服器。
開始之前
在佈建 VPN 伺服器之前,請依下列順序完成下列必要條件:
-
檢閱 VPN 伺服器的規劃考量。
-
決定要使用哪種 VPN 客戶端驗證模式:基於憑證、使用者 ID 與密碼,或是兩者皆用。 如需相關資訊,請參閱 設定用戶端至網站鑑別。
-
為您的 VPN 伺服器和IBM Cloud Secrets Manager建立 IAM 服務到服務授權。
-
在您選取的 VPC 中 建立 VPC 及至少一個子網路。
若要取得高可用性,請在兩個不同區域中建立一個 VPC 及兩個子網路。 VPN 伺服器位於兩個子網路中。
在主控台中建立 VPN 伺服器
若要在主控台中建立 VPN 伺服器,請遵循下列步驟:
-
完成「開始之前」一節中的所有必要條件。
-
請在瀏覽器中開啟 IBM Cloud 控制台,並登入您的帳戶。
-
選取導覽功能表
,然後按一下基礎結構
> 網路 > VPN。
-
按一下頁面右上方的 建立。
-
在 VPN 類型區段中,按一下 用戶端至網站伺服器。
VPN 類型區段 「位置」區段會顯示 VPC 所在的地區,以及將佈建 VPN 伺服器的位置。
-
在「詳細資訊」區段中,請填寫以下資訊:
-
VPN 伺服器名稱-輸入 VPN 伺服器的名稱,例如
my-vpn-server。 -
資源群組 — 為 VPN 伺服器選取一個資源群組。
-
標籤-選擇性地新增標籤,以組織、追蹤使用成本或管理對資源的存取權。
-
存取管理標籤-選擇性地將存取管理標籤新增至資源,以協助組織存取控制關係。 存取權管理標籤唯一支援的格式是
key:value。 如需相關資訊,請參閱 使用標籤控制對資源的存取權。 -
虛擬專用雲端-選取 VPN 伺服器的 VPC。
-
用戶端 IPv4 位址儲存區-輸入 CIDR 範圍。 用戶端會從這個位址儲存區為其階段作業指派一個 IP 位址。
VPN 詳細資料區段
-
-
在「子網」區段中,請指定以下資訊:
-
選擇 VPN 伺服器模式:
- 高可用性模式 — 將 VPN 伺服器部署於不同區域內的兩個子網中。 最適合於用戶端 VPN 存取非常重要的多區域部署及解決方案。
- 獨立模式 — 將 VPN 伺服器部署於單一子網和區域中。 最適合於不需要多區域備援的單一區域部署。
-
指定 VPC 的子網路 (獨立式模式) 或子網路 (HA 模式)。
VPN 子網路區段
-
-
在「驗證」區段中,請指定以下資訊:
-
VPN 伺服器驗證- 從 Secrets Manager 中選擇伺服器 SSL 憑證。 完成所有必要欄位。
VPN 伺服器鑑別區段 -
用戶端鑑別模式-選取此選項可透過使用用戶端憑證、使用者 ID 及/或通行碼來配置使用者鑑別。
-
客戶端憑證 — 您可以選取一個客戶端憑證,並設定使用者 ID 和密碼,以確保最佳安全性。 使用者 ID 和密碼提供了一層額外的安全防護,需提供額外的登入憑證才能存取帳戶。
您可以選擇上傳 PEM 格式的憑證撤銷清單 (CRL)。 上傳 CRL 後,PEM 檔案會顯示為 VPN 伺服器的名稱。
-
使用者 ID 及通行碼-配置 VPN 用戶端使用者的已新增鑑別。 此鑑別方法提供與 IBM Cloud IAM 整合的新增安全層,以完成用戶端鑑別。 當驗證完成後,系統會將該代碼傳遞給 openVPN 客戶端進行驗證。
VPN 用戶端鑑別區段 -
-
-
在「安全群組」區段中,至少選取一個安全群組。
若要在計劃部署 VPN 伺服器的子網路和其他透過 VPN 通道通訊的 VPC 子網路上設定一個或多個安全群組及其規則,或選擇性地設定存取控制清單 (ACL),請參閱 設定與 VPN 伺服器搭配使用的 ACL。
VPN 安全群組區段 您可以在從 VPN 伺服器的詳細資料頁面 (「安全群組」標籤) 佈建之後連接安全群組。
-
在 其他配置 區段中,指定下列資訊:
-
DNS 伺服器 IP 位址-選擇性地指定一或兩個 DNS 伺服器 IP 位址,以進行網域名稱解析。
-
閒置超時時長(秒) ——若在此時間間隔結束前,VPN 伺服器未偵測到任何流量,系統將自動斷開連線。 此數值的範圍為
0至28800秒。 預設值為600秒。 -
傳輸通訊協定-選取下列其中一個通訊協定,並輸入有效的 VPN 埠 (
1 - 65535)。- UDP 是執行錯誤檢查但會捨棄錯誤封包的無連線通訊協定。 快於 TCP。
- TCP 是一種連線導向的通訊協定,含有錯誤檢查和錯誤回復。 比 UDP 更可靠。
-
通道模式-指定下列其中一項:
-
全隧道模式 — 所有流量皆透過 VPN 介面傳輸至 VPN 隧道。
-
分割隧道 — 私人流量透過 VPN 介面流向 VPN 隧道,而公共流量則透過現有的 LAN 介面傳輸。
VPN 其他配置區段
-
-
從 CLI 建立 VPN 伺服器
開始之前,請 設定 CLI 環境。
若要從 CLI 建立 VPN 伺服器,請輸入下列指令:
ibmcloud is vpn-server-create --subnets SUBNETS --client-ip-pool CLIENT_IP_POOL --cert CERT (--client-auth-methods certificate | username | certificate,username | username,certificate) [--client-ca CLIENT_CA] [--client-crl CLIENT_CRL] [--client-dns CLIENT_DNS] [--client-idle-timeout CLIENT_IDLE_TIMEOUT] [--enable-split-tunnel false | true] [--port PORT] [--protocol udp | tcp] [--sg SECURITY_GROUP1 --sg SECURITY_GROUP2 ...] [--name NAME] [--resource-group-id RESOURCE_GROUP_ID | --resource-group-name RESOURCE_GROUP_NAME] [--output JSON] [-q, --quiet]
指令選項
- --subnets:要為此 VPN 伺服器進行配置的子網,其 ID 需以逗號分隔。 為確保高可用性,請在不同區域中使用子網,最多可設定兩個子網。
- --client-ip-pool:VPN 客戶端 IPv4 的位址池,以 CIDR 格式表示。 要求不得與 VPC 中的任何現有位址字首或者下列任何保留位址重疊:127.0.0.0/8(IPv4 迴圈位址)、161.26.0.0/16(IBM 服務)、166.8.0.0/14(雲端服務端點)、169.254.0.0/16(IPv4 鏈結-本端位址)、224.0.0.0/4(IPv4 多重播送位址)。 用戶端 IP 位址儲存區 CIDR 的字首長度必須介於 /9(8,388,608 個位址)和 /22(1024 個位址)之間。 建議使用包含兩倍於啟用並行連線數上限所需的 IP 位址數的 CIDR 區塊。
- --cert:此 VPN 伺服器的憑證實例 CRN。
- --client-auth-methods: 以逗點區隔的用戶端鑑別方法清單。 下列其中一項: certificate、username、certificate、username、username、certificate。
- --client-ca:用於 VPN 客戶端憑證授權機構 (CA) 的憑證實例之 CRN。
- -- client-crl:CRL | @CRL-file。 以 PEM 格式編碼的憑證撤銷清單內容。
- --client-dns:以逗號分隔的 DNS 伺服器位址清單,這些位址將提供給連線至此 VPN 伺服器的 VPN 客戶端。 最多可設定兩台 DNS 伺服器。
- --client-idle-timeout:VPN 客戶端處於閒置狀態的秒數,超過此時間後,此 VPN 伺服器將斷開其連線。 設定為 0 可防止伺服器斷開閒置客戶端的連線(預設值:600 )。
- --enable-split-tunnel:指示此 VPN 伺服器是否已啟用分割隧道功能。 下列其中一項: false,true (預設值: false)。
- --port:此 VPN 伺服器要使用的埠號(預設:443 )。
- --protocol:此 VPN 伺服器應使用的傳輸協定。 下列其中一項: udp,tcp (預設值: udp)。
- --sg:VPN 伺服器的安全群組 ID 或名稱(以逗號分隔)。
- --name:VPN 伺服器的新名稱。
- --resource-group-id:資源群組的 ID。 此選項與 --resource-group-name 互斥。
- --resource-group-name:資源群組的名稱。 此選項與 --resource-group-id 互斥。
- --output:指定輸出格式,僅支援 JSON。 下列其中一項: JSON。
- -q, --quiet:抑制詳細輸出。
指令範例
ibmcloud is vpn-server-create --subnets 0717-a7191f77-7c87-4ad4-bb11-a37f9e9fc0f0,0736-4b871e22-e819-4f87-bb17-e457a88246a2 --cert crn:v1:bluemix:public:cloudcerts:us-south:a/aa5a471f75bc456fac416bf02c4ba6de:1862b0b4-c1f8-4eef-a6b5-e9c00c9f593d:certificate:6c801ef768c139d986b4c6f91175e8cc --client-ip-pool 190.165.7.0/20 --client-auth-methods certificate --client-ca crn:v1:bluemix:public:cloudcerts:us-south:a/aa5a471f75bc456fac416bf02c4ba6de:1862b0b4-c1f8-4eef-a6b5-e9c00c9f593d:certificate:6c801ef768c139d986b4c6f91175e8cc
ibmcloud is vpn-server-create --name myvpnserver --subnets 0717-a7191f77-7c87-4ad4-bb11-a37f9e9fc0f0,0736-4b871e22-e819-4f87-bb17-e457a88246a2 --cert crn:v1:bluemix:public:cloudcerts:us-south:a/aa5a471f75bc456fac416bf02c4ba6de:1862b0b4-c1f8-4eef-a6b5-e9c00c9f593d:certificate:6c801ef768c139d986b4c6f91175e8cc --client-ip-pool 190.166.7.0/20 --client-auth-methods username
ibmcloud is vpn-server-create --name myvpnserver2 --subnets 0717-a7191f77-7c87-4ad4-bb11-a37f9e9fc0f0 --cert crn:v1:bluemix:public:cloudcerts:us-south:a/aa5a471f75bc456fac416bf02c4ba6de:1862b0b4-c1f8-4eef-a6b5-e9c00c9f593d:certificate:6c801ef768c139d986b4c6f91175e8cc --client-ip-pool 190.167.7.0/20 --client-auth-methods username --client-dns 9.9.9.9,8.8.8.8 --protocol tcp --port 8888 --enable-split-tunnel true --client-idle-timeout 1200
ibmcloud is vpn-server-create --name myvpnserver3 --subnets 0717-a7191f77-7c87-4ad4-bb11-a37f9e9fc0f0 --cert crn:v1:bluemix:public:cloudcerts:us-south:a/aa5a471f75bc456fac416bf02c4ba6de:1862b0b4-c1f8-4eef-a6b5-e9c00c9f593d:certificate:6c801ef768c139d986b4c6f91175e8cc --client-ip-pool 190.168.7.0/20 --client-auth-methods username --sg r006-e32f671c-463d-4f93-88e3-2dd0413476b4 --sg r006-3af7a9db-d9bc-43d4-bced-93e0a33fee25
ibmcloud is vpn-server-create --subnets 0736-4b871e22-e819-4f87-bb17-e457a88246a2 --client-ip-pool 192.170.0.0/22 --client-dns 172.34.1.100 --cert crn:v1:bluemix:public:cloudcerts:us-south:a/0046b57b897f419080c4ed3e011b86d4:5f1a72bc-b4c2-413f-bd22-011cfa4be5db:certificate:c81627a1bf6f766379cc4b98fd21ccd6 --client-auth-methods certificate,username --client-ca crn:v1:bluemix:public:cloudcerts:us-south:a/0046b57b897f419080c4ed3e011b86d4:5f1a72bc-b4c2-413f-bd22-011cfa4be5db:certificate:c81627a1bf6f766379cc4b98fd21ccd6 --client-crl @./openvpn/crl.pem --name vpnswithcrl --sg r006-5744b689-e5c4-461d-9f9b-ce5e7e8dbed6
使用 API 建立 VPN 伺服器
若要使用 API 建立用戶端至網站 VPN 伺服器,請遵循下列步驟:
-
使用正確的變數來設定 API 環境。
-
儲存要在 API 指令中使用的任何其他變數; 例如:
ResourceGroupId-使用get resource groups指令尋找資源群組 ID,然後移入變數:
export ResourceGroupId=<your_resourcegroup_id>SubnetId-使用get subnet指令尋找子網路 ID,然後移入變數:
export SubnetId=<your_subnet_id> -
起始所有變數時,請建立 VPN 伺服器:
curl -X POST "$vpc_api_endpoint/v1/vpn_servers?version=$api_version&generation=2" \ -H "Authorization: Bearer $iam_token" \ -d '{ "certificate": { "crn": "crn:v1:bluemix:public:cloudcerts:us-south:a/aa5a471f75bc456fac416bf02c4ba6de:1862b0b4-c1f8-4eef-a6b5-e9c00c9f593d:certificate:6c801ef768c139d986b4c6f91175e8cc" }, "client_ip_pool": "192.168.50.0/22", "name": "my-new-vpn-server", "subnets": [ { "id": "0716-046c3fd3-1cc5-40f6-b0ad-bbc305308f6d" }, { "id": "0717-30ff71ff-3e90-42a9-aa93-96a062081f18" } ], "client_authentication": [ { "method": "certificate", "client_ca": { "crn": "crn:v1:bluemix:public:cloudcerts:us-south:a/aa5a471f75bc456fac416bf02c4ba6de:1862b0b4-c1f8-4eef-a6b5-e9c00c9f593d:certificate:6c801ef768c139d986b4c6f91175e8cc" } }, { "method": "username", "identity_provider": { "provider_type": "iam" } } ] "resource_group": { "id": "'$ResourceGroupId'" } }'
若要檢視用戶端到站 VPN 伺服器的完整 API 集,請參閱 VPC API 參考資料。
使用 Terraform 建立 VPN 伺服器
要使用 Terraform 設定 VPN 伺服器,請遵循以下步驟:
-
建立一個
IBM Cloud Secrets Manager實例。 -
在本地產生伺服器憑證/金鑰和用戶端憑證/金鑰,並將其匯入 Secrets Manager 範例,或使用 Secrets Manager 服務的私人憑證功能產生憑證/金鑰。
resource "ibm_resource_instance" "sec_mgr" { name = "vpc-secmgr" service = "secrets-manager" plan = var.service_plan location = var.region_name resource_group_id = data.ibm_resource_group.group.id timeouts { create = "30m" update = "30m" delete = "30m" } } resource "ibm_sm_secret_group" "sm_secret_group" { instance_id = ibm_resource_instance.sec_mgr[0].guid region = var.region_name name = "vpc-sec-group" description = "default secret group" } output "import_cert_server_crn" { value = ibm_sm_imported_certificate.sm_imported_certificate_server.crn } output "import_cert_client_crn" { value = ibm_sm_imported_certificate.sm_imported_certificate_client.crn } -
使用一個子網路建立一個 VPC。
resource "ibm_is_vpc" "vpc" { name = "vpc-vpnserver" } resource "ibm_is_subnet" "subnet" { name = "mysubnet-tf" vpc = ibm_is_vpc.vpc.id zone = var.zone_name total_ipv4_address_count = 256 } -
建立具有入站和出站規則的安全群組,以允許所有流量。
resource "ibm_is_security_group" "sg_all" { name = "vpc-sg-all" vpc = ibm_is_vpc.vpc.id } resource "ibm_is_security_group_rule" "sg_rule1" { group = ibm_is_security_group.sg_all.id direction = "inbound" remote = "0.0.0.0/0" } resource "ibm_is_security_group_rule" "sg_rule2" { group = ibm_is_security_group.sg_all.id direction = "outbound" remote = "0.0.0.0/0" } -
在 Secrets Manager 範例的子網路、安全群組和伺服器/用戶端憑證中建立 VPN 伺服器。
resource "ibm_is_vpn_server" "example" { certificate_crn = ibm_sm_imported_certificate.sm_imported_certificate_server.crn client_authentication { method = "certificate" client_ca_crn = ibm_sm_imported_certificate.sm_imported_certificate_client.crn } client_ip_pool = "198.168.0.0/16" enable_split_tunneling = true name = "terry-vpn-server" port = 443 protocol = "tcp" subnets = [ibm_is_subnet.subnet.id] security_groups = [ibm_is_security_group.sg_all.id] } resource "ibm_is_vpn_server_route" "cse1" { vpn_server = ibm_is_vpn_server.example.id destination = "166.8.0.0/14" name = "vpn-server-route-cse1" } resource "ibm_is_vpn_server_route" "cse2" { vpn_server = ibm_is_vpn_server.example.id destination = "161.26.0.0/16" name = "vpn-server-route-cse2" } -
下載 VPN 用戶端設定檔,並在用戶端設定檔中設定用戶端證書和金鑰。
data "ibm_is_vpn_server_client_configuration" "my_vpn_client_conf" { vpn_server = ibm_is_vpn_server.example.id } resource "local_file" "my_vpn_client_conf" { content = "${data.ibm_is_vpn_server_client_configuration.my_vpn_client_conf.vpn_server_client_configuration}\ncert ${path.cwd}/import_certs/client_cert.pem\nkey ${path.cwd}/import_certs/client_key.pem" filename = "my_vpn_server.ovpn" }然後,使用者就可以使用 OpenVPN 用戶端的 VPN 用戶端設定檔,將其用戶端系統連線至已建立的 VPN 伺服器。
如需更多資訊,請參閱 IBM Terraform Registry。
下一步
- 若要驗證 VPN 伺服器已順利建立,請等待幾分鐘,然後跳至 用戶端至網站伺服器 表格,以確保 VPN 伺服器狀態為
Stable且「性能」狀態為Healthy。 - 建立 VPN 路由。
- 設定 VPN 用戶端環境並連接至 VPN 伺服器。