全部產品
Search
文件中心

Alibaba Cloud Linux:開啟或關閉IPv6

更新時間:Jul 17, 2024

本文主要介紹如何開啟或關閉Alibaba Cloud Linux 2作業系統中的IPv6。

前提條件

背景資訊

Alibaba Cloud Linux 2鏡像在aliyun-2.1903-x64-20G-alibase-20190829.vhd及之前的版本未開啟IPv6,從aliyun_2_1903_x64_20G_alibase_20200221.vhd版本開始預設開啟了IPv6。

開啟IPv6

暫時開啟

重要

暫時開啟IPv6後,執行個體一旦停止或重啟,開啟IPv6的相關配置會失效,請您謹慎選擇。

在鏡像aliyun_2_1903_64_20G_alibase_20190619.vhd及之前的版本中,/etc/systemd/network/目錄下的.network檔案只配置了DHCP=ipv4,您可以按照以下步驟修改檔案內容來暫時開啟IPv6。

  1. 遠端連線ECS執行個體。

    具體操作,請參見通過密碼或密鑰認證登入Linux執行個體

  2. 運行以下命令進入/etc/systemd/network/目錄。

    cd /etc/systemd/network/
  3. 使用命令ls查詢該目錄下的.network檔案。

    本文以50-dhcp.network檔案為例。alinux2

  4. 修改檔案50-dhcp.network內容。

    vi /etc/systemd/network/50-dhcp.network
  5. i進入編輯模式。

    [Network]下的資訊修改為DHCP=yes

    說明

    檔案內參數Name=eth*表示適配所有網路介面,所有網路介面都將通過DHCP配置IP地址與路由。如果只需要配置指定的網路介面,可以修改參數Name為指定的網路介面,例如,Name=eth0表示只適配eth0網路介面。更多關於network的資訊請參見systemd.network

    [Match]
    Name=eth*
    
    [Network]
    DHCP=yes

    修改完成後按Esc鍵,並輸入:wq後按下斷行符號鍵,儲存並退出。

  6. 運行以下命令開啟IPv6。

    • 開啟所有網路介面。

      sudo sysctl -w net.ipv6.conf.all.disable_ipv6=0
      sudo sysctl -w net.ipv6.conf.default.disable_ipv6=0
    • 開啟指定網路介面樣本。

      sudo sysctl -w net.ipv6.conf.eth0.disable_ipv6=0

持久開啟

以下操作步驟將持久化開啟IPv6,執行個體重啟後配置仍然生效。

  1. 遠端連線ECS執行個體。

    具體操作,請參見通過密碼或密鑰認證登入Linux執行個體

  2. 修改/etc/sysctl.conf設定檔。

    vi /etc/sysctl.conf
  3. i進入編輯模式。使用以下任一方式修改檔案內容。

    • 刪除下列配置資訊。

      net.ipv6.conf.all.disable_ipv6 = 1
      net.ipv6.conf.default.disable_ipv6 = 1
      net.ipv6.conf.lo.disable_ipv6 = 1
    • 修改對應的配置資訊為如下內容。

      net.ipv6.conf.all.disable_ipv6 = 0
      net.ipv6.conf.default.disable_ipv6 = 0
      net.ipv6.conf.lo.disable_ipv6 = 0

      如果需要開啟指定網路介面,修改資訊樣本如下。

      net.ipv6.conf.eth0.disable_ipv6 = 0

    修改完成後按Esc鍵,並輸入:wq後按下斷行符號鍵,儲存並退出。

  4. 驗證/etc/sysctl.conf配置資訊是否與initramfs中的/etc/sysctl.conf存在差異。

    diff -u /etc/sysctl.conf <(lsinitrd -f /etc/sysctl.conf)
    說明

    Alibaba Cloud Linux 2配置了initramfs(initram file system)。如果initramfs中的/etc/sysctl.conf檔案與IPv6的設定檔/etc/sysctl.conf存在差異,系統可能會生效新的配置,與您需求的配置混淆。

  5. 如果兩個設定檔存在差異,您可以執行以下命令重建initramfs。

    sudo dracut -v -f
  6. 重啟執行個體。

    sudo reboot
  7. 執行ifconfig命令判斷是否已開啟IPv6。

    如果網路設定資訊包含以下資訊,表示IPv6已開啟。

    inet6 <以fe80::開頭的單播地址>
    inet6 <ECS執行個體的IPv6地址>

關閉IPv6

暫時關閉

以下命令將暫時關閉IPv6。

重要

暫時關閉IPv6後,執行個體一旦停止或重啟,關閉IPv6的相關配置會失效,請您謹慎選擇。

  • 關閉所有網路介面。

    sudo sysctl -w net.ipv6.conf.all.disable_ipv6=1
    sudo sysctl -w net.ipv6.conf.default.disable_ipv6=1
  • 關閉指定網路介面樣本。

    sudo sysctl -w net.ipv6.conf.eth0.disable_ipv6=1

持久關閉

以下操作步驟將持久化關閉IPv6,執行個體重啟後配置仍然生效。您可以通過以下任一方式關閉IPv6。

  • 通過以下任一命令列參數持久化關閉IPv6。

    • sudo grubby --args="ipv6.disable_ipv6=1" --update-kernel=/boot/vmlinuz-$(uname -r)
    • sudo grubby --args="ipv6.disable=1" --update-kernel=/boot/vmlinuz-$(uname -r)
    說明

    參數--args="ipv6.disable_ipv6=1"--args="ipv6.disable=1"均能實現關閉IPv6的功能,區別在於設定--args="ipv6.disable_ipv6=1"參數只關閉網路介面IPv6;而設定--args="ipv6.disable=1"參數直接禁用了IPv6的核心模組,詳情請參見Linux核心IPv6說明

  • 通過修改/etc/sysctl.conf檔案持久化關閉IPv6。

    1. 修改/etc/sysctl.conf設定檔。

      vi /etc/sysctl.conf
    2. i進入編輯模式,將對應的配置資訊修改為如下所示。

      net.ipv6.conf.all.disable_ipv6=1
      net.ipv6.conf.default.disable_ipv6=1

      如果需要關閉指定網路介面,修改樣本如下。

      net.ipv6.conf.eth0.disable_ipv6=1
    3. 重啟執行個體。

      sudo reboot
    4. 執行ifconfig命令判斷是否已關閉IPv6。

      如果網路設定資訊沒有包含以下資訊,表示IPv6已關閉。

      inet6 <以fe80::開頭的單播地址>
      inet6 <ECS執行個體的IPv6地址>

支援多網卡配置

如果您需要配置多個IPv6地址,可以參見下述方式進行配置。

  1. 遠端連線ECS執行個體。

    具體操作,請參見通過密碼或密鑰認證登入Linux執行個體

  2. 運行以下命令進入/etc/systemd/network/目錄。

    cd /etc/systemd/network/
  3. 使用命令ls查詢該目錄下的.network檔案。

    例如,10-eth0.network檔案。

  4. 使用命令cp複製一個新的設定檔。

    例如:

    cp 10-eth0.network 20-dhcp.network
  5. 運行以下命令修改設定檔。

    sed -i 's/^Name.*$/Name=*/g' /etc/systemd/network/20-dhcp.network
  6. 重啟systemd-networkd服務使配置生效。

    sudo systemctl restart systemd-networkd