35+ stories, thoughts and ideas.35+ stories, thoughts and ideas.


stories, thoughts and ideas.

使用OCI命令行快速更换 oracle cloud 公网IP和分配IPv6地址

  • 2022/5/4 更新:新增IPv6地址分配方法

安装和配置

首先需要安装oci命令行和jq,详细步骤参考 OCI文档

sudo apt install python3-pip jq
pip install --user oci-cli

# oci --version
3.6.1

安装完oci命令在 ~/.local/bin 下面,添加到PATH即可。
使用下面命令初始化配置

oci setup config

如果要用脚本申请VM,还需要安装terraform

curl -fsSL https://apt.releases.hashicorp.com/gpg | sudo apt-key add -
sudo apt-add-repository "deb [arch=amd64] https://apt.releases.hashicorp.com $(lsb_release -cs) main"
sudo apt-get update && sudo apt-get install terraform

# terraform --version
Terraform v1.1.7

更换IPv4地址

使用下面脚本更换VM公网IP,注意下面命令分配的是临时公网IP。

#获取本机IP
IP=$(curl -s https://api.ipify.org)
#或者指定目标机器的公网IP
#IP=88.88.88.88
#Tenancy ID,按实际情况填写
TID="ocid1.tenancy.oc1..aaaaaaaaxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx"
#AVAILABILITY DOMAIN,用下面命令获取
#oci iam availability-domain list -c $TID
ADO="gspA:AP-OSAKA-1-AD-1"

PIPID=$(oci network public-ip list -c $TID --scope AVAILABILITY_DOMAIN --availability-domain $ADO --all|jq -r '.data[]|select(."ip-address" == "'"$IP"'")|.id')
PRIID=$(oci network public-ip list -c $TID --scope AVAILABILITY_DOMAIN --availability-domain $ADO --all|jq -r '.data[]|select(."ip-address" == "'"$IP"'")|."private-ip-id"')
echo "Target IP=$IP"
echo "PublicIP Id=$PIPID"
echo "PrivatIP Id=$PRIID"
#注销旧IP
oci network public-ip delete --public-ip-id $PIPID   --force --wait-for-state TERMINATED
sleep 5
#分配新的临时公网IP
oci network public-ip create -c $TID --lifetime EPHEMERAL --private-ip-id $PRIID --wait-for-state ASSIGNED
#检查运行结果
oci compute instance list --all -c $TID

分配IPv6地址

#获取网卡信息
oci compute vnic-attachment list -c $TID
#列出指定网卡的ipv6地址,如果没有返回说明还没分配
oci network ipv6 list --vnic-id "ocid1.vnic.xxxxxxxxxxxxxxxxxxxx"
#给指定网卡分配指定ipv6地址
oci network ipv6 create  --vnic-id  "ocid1.vnic.xxxxxxxxxxxx"  --ip-address 2222:3333:4444:5555::6666

常用命令

  • 获取实例基本信息
 oci compute instance  list -c $TID
本原创文章未经允许不得转载 | 当前页面:35+ stories, thoughts and ideas. » 使用OCI命令行快速更换 oracle cloud 公网IP和分配IPv6地址

评论 2

  1. 你好博主,我照着做后,到这一步卡住了
    #分配新的临时公网IP
    oci network public-ip create -c $TID --lifetime EPHEMERAL --private-ip-id $PRIID --wait-for-state ASSIGNED

    #提示报错
    RequestException: (MaxRetryError("OCIConnectionPool(host='iaas.ap-osaka-1.oraclecloud.com', port=443): Max retries exceeded with url: /20160918/publicIps (Caused by NewConnectionError(': Failed to establish a new connection: [Errno -3] Temporary failure in name resolution'))"), 'Request Endpoint: POST https://iaas.ap-osaka-1.oraclecloud.com/20160918/publicIps See https://docs.oracle.com/en-us/iaas/Content/API/Concepts/sdk_troubleshooting.htm for help troubleshooting this error, or contact support and provide this full error message.')

    #帮我看看是啥问题,谢谢
    我的TG号 @snvpn

    1 2022-10-09    回复
    • 你这个 failure in name resolution 看起来像是网络连接问题,访问不了https://iaas.ap-osaka-1.oraclecloud.com/20160918/publicIps ,如果oci命令行是装在国内机器可能有这种问题,装在oracle cloud的机器试试。

      rich 2022-10-10    回复