toa


操作場景

ELB可以針對客戶訪問的業務為訪問者提供個性化的管理策略,制定策略之前需要獲取來訪者的真實IP。TOA內核模塊主要用來獲取ELB轉化過的訪問者真實IP地址(僅支持IPv4),該插件安裝在ELB后端服務器。

本文檔僅適用於四層(TCP協議)服務,當客戶需要在操作系統中編譯TOA內核模塊時,可參考本文檔進行配置。

Linux內核版本為2.6.32和Linux內核版本為3.0以上的操作系統,在配置TOA內核模塊的操作步驟上有所區別,具體操作請參照相應的操作步驟進行配置。

說明:
  • TOA不支持UDP協議的監聽器。
  • TOA模塊在以下操作系統中驗證可以正常工作,其他內核版本安裝方法類似。
    • CentOS 6.8(Kernel version 2.6.32)
    • Suse 11 sp3 (Kernel version 3.0.76)
    • CentOS 7/7.2 (Kernel version 3.10.0)
    • Ubuntu 16.04.3 (Kernel version 4.4.0)
    • Ubuntu 18.04 (Kernel version 4.15.0)
    • OpenSUSE 42.2 (Kernel version 4.4.36)
    • CoreOS 10.10.5 (Kernel version 4.9.16)
    • Debian 8.2.0 (Kernel version 3.16.0)

前提條件

  • 編譯內核模塊開發環境需與當前內核版本開發環境一致。
  • 確保虛擬機可以訪問開放源。
  • 如果是非root用戶,需擁有sudo權限。

操作步驟

  • 以下操作步驟是針對Linux內核版本為3.0以上的操作系統。
  1. 准備編譯環境。
    說明:

    安裝內核模塊開發包的過程中,如果源里面找不到對應內核版本的安裝包,需要自行去網上下載需要的安裝包。

    以下是不同Linux發行版本的操作說明,請根據環境選擇對應的方案。

    • CentOS環境下的操作步驟。
      1. 執行如下命令,安裝gcc編譯器。

        sudo yum install gcc

      2. 執行如下命令,安裝make工具。

        sudo yum install make

      3. 執行如下命令,安裝內核模塊開發包,開發包頭文件與庫的版本需要與內核版本一致。

        sudo yum install kernel-devel-`uname -r`

        說明:

        如果自帶源里沒有對應的內核開發包,可以到如下地址中去下載對應的rpm包。

        地址:https://mirror.netcologne.de/oracle-linux-repos/ol7_latest/getPackage/

        以3.10.0-693.11.1.el7.x86_64為例,下載后執行以下命令安裝:

        rpm -ivh kernel-devel-3.10.0-693.11.1.el7.x86_64.rpm。

    • Ubuntu、Debian環境下的操作步驟。
      1. 執行如下命令,安裝gcc編譯器。

        sudo apt-get install gcc

      2. 執行如下命令,安裝make工具。

        sudo apt-get install make

      3. 執行如下命令,安裝內核模塊開發包,開發包頭文件與庫的版本需要與內核版本一致。

        sudo apt-get install linux-headers-`uname -r`

    • SUSE環境下的操作步驟。
      1. 執行如下命令,安裝gcc編譯器。

        sudo zypper install gcc

      2. 執行如下命令,安裝make工具。

        sudo zypper install make

      3. 執行如下命令,安裝內核模塊開發包,開發包頭文件與庫的版本需要與內核版本一致。

        sudo zypper install kenel-default-devel

    • CoreOS環境下的操作步驟。

      CoreOS環境下在容器內進行內核模塊的編譯時,需要先啟動一個用於內核模塊開發的容器,然后再進行編譯。

      詳細過程參見CoreOS官方文檔,獲取方式如下鏈接所示。

      https://coreos.com/os/docs/latest/kernel-modules.html

  2. 編譯內核模塊
    1. 使用git工具,執行如下命令,下載TOA內核模塊源代碼。

      git clone https://github.com/Huawei/TCP_option_address.git

      說明:

      如果未安裝git工具,請進入以下鏈接下載TOA模塊源代碼。

      https://github.com/Huawei/TCP_option_address

    2. 執行如下命令,進入源碼目錄,編譯模塊。

      cd src

      make

      編譯過程未提示warning或者error,說明編譯成功,檢查當前目錄下是否已經生成toa.ko文件。

      說明:

      如果報錯提示“config_retpoline=y but not supported by the compiler Compiler update recommended”,表明gcc版本過老,建議將gcc升級為較新版本

  3. 加載內核模塊
    1. 執行如下命令,加載內核模塊。

      sudo insmod toa.ko

    2. 執行如下命令,驗證模塊加載情況,查看內核輸出信息。

      dmesg | grep TOA

      若提示信息包含“TOA: toa loaded”,說明內核模塊加載成功。

      說明:

      CoreOS在容器中編譯完內核模塊后,需要將內核模塊復制到宿主系統,然后在宿主系統中加載內核模塊。由於編譯內核模塊的容器和宿主系統共享/lib/modules目錄,可以在容器中將內核模塊復制到該目錄下,以供宿主系統使用。

  4. 自動加載內核模塊

    為了使TOA內核模塊在系統啟動時生效,可以將加載TOA內核模塊的命令加到客戶的啟動腳本中。

    自動加載內核模塊的方法有以下兩種方法:

    • 客戶可以根據自身需求,在自定義的啟動腳本中添加加載TOA內核模塊的命令。
    • 參考以下操作步驟配置啟動腳本。
      1. “/etc/sysconfig/modules/”目錄下新建toa.modules文件。該文件包含了TOA內核模塊的加載腳本。

        toa.modules文件內容,請參考如下示例:

        #!/bin/sh

        /sbin/modinfo -F filename /root/toa/toa.ko > /dev/null 2>&1

        if [ $? -eq 0 ]; then

        /sbin/insmod /root/toa/toa.ko

        fi

        其中“/root/toa/toa.ko”為TOA內核模塊文件的路徑,客戶需要將其替換為自己編譯的TOA內核模塊路徑。

      2. 執行以下命令,為toa.modules啟動腳本添加可執行權限。

        sudo chmod +x /etc/sysconfig/modules/toa.modules

        說明:

        客戶升級內核后,會導致現有TOA內核模塊不匹配,因此需要重新編譯TOA內核模塊。

  5. 安裝多節點

    如果要在相同的客戶操作系統中加載此內核模塊,可以將toa.ko文件拷貝到需要加載此模塊的虛擬機中,然后參照3步驟加載內核模塊。

    內核模塊加載成功以后,應用程序可以正常獲取訪問者的真實源IP地址。

    說明:

    節點的操作系統發行版與內核版本必須相同。

  • 以下操作步驟是針對Linux內核版本為2.6.32的操作系統。
    說明:

    TOA插件支持2.6.32-xx內核版本的操作系統(CentOS 6.8鏡像)。參考如下步驟,進行配置。

  1. 從以下網站中獲取含有TOA模塊的內核源代碼包(Linux-2.6.32-220.23.1.el6.x86_64.rs.src.tar.gz)。

    http://kb.linuxvirtualserver.org/images/3/34/Linux-2.6.32-220.23.1.el6.x86_64.rs.src.tar.gz

  2. 解壓TOA模塊的內核源碼包。
  3. 修改編譯相關參數。
    1. 進入“linux-2.6.32-220.23.1.el6.x86_64.rs”文件夾。
    2. 編輯“net/toa/toa.h”文件。

      將#define TCPOPT_TOA200配置項修改為#define TCPOPT_TOA254

    3. 在shell頁面,執行以下命令。

      sed -i 's/CONFIG_IPV6=m/CONFIG_IPV6=y/g' .config

      echo -e '\n# toa\nCONFIG_TOA=m' >> .config

      配置之后IPV6模塊將會被編譯進內核中,TOA會被編譯成單獨內核模塊,可以單獨啟動和停止。

    4. 編輯Makefile。

      可在“EXTRAVERSION =”等號后加上自定義的一些說明,將會在“uname -r”中顯示,例如-toa。

  4. 執行以下命令,編譯軟件包。

    make -j n

    說明:

    n可以依據系統CPU核數配置相應的參數,例如:4核CPU,可配置為4,從而加快編譯速度。

  5. 執行以下命令,安裝內核模塊。

    make modules_install

    命令執行結果如圖1所示。

    圖1 安裝內核模塊
  6. 執行如下命令,安裝內核。

    make install

    命令執行結果如圖2所示。

    圖2 安裝內核
  7. 打開“/boot/grub/grub.conf”文件,配置開機默認啟動,如圖3所示。
    1. 將開機默認啟動內核由第一個內核修改為第零個內核,即“default=1”修改為“default=0”。
    2. 在新增的含有toa模塊的vmlinuz-2.6.32-toa內核行末尾添加“nohz=off”參數。如果不關閉nohz,大壓力下CPU0可能會消耗過高,導致壓力不均勻
      圖3 配置文件
    3. 修改完成后保存退出,重啟操作系統。

      重啟系統時,系統將加載vmlinuz-2.6.32-toa內核。

  8. 待系統重啟完成之后,執行以下命令加載TOA模塊。

    modprobe toa

    建議將modprobe toa命令加入開機啟動腳本,以及系統定時監控腳本中,如圖4所示。

    圖4 modprobe toa命令

    TOA模塊加載完成后,查詢內核信息如圖5所示。

    圖5 查詢內核


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM