tencent cloud

comentários

Configuração de um CVM de gateway público

Última atualização:2024-01-24 17:44:05
    Atenção:
    A partir de 6 de dezembro de 2019, o Tencent Cloud não oferece mais suporte à configuração de um CVM como o gateway público na página de aquisição do CVM. Se for necessário configurar um gateway, siga as instruções abaixo.

    Visão geral

    Você pode acessar a internet usando um CVM de gateway público com um IP público ou EIP quando alguns de seus CVMs baseados no VPC não possuem IPs públicos. O CVM de gateway público converte o IP de origem do tráfego de saída. Quando outros CVMs acessarem a internet por meio do gateway público CVM, os IPs de origem serão convertidos em IPs públicos do CVM de gateway público. Consulte a figura abaixo.
    

    Pré-requisitos

    Você está logado no console do CVM.
    O CVM de gateway público e os CVMs que precisam acessar a internet pelo CVM de gateway público devem estar localizados em sub-redes diferentes porque o CVM de gateway público só consegue encaminhar solicitações de outras sub-redes.
    O CVM de gateway público deve ser do Linux. Os CVMs do Windows não funcionarão.

    Instruções

    Etapa 1: vincule um EIP (opcional)

    Nota:
    Pule esta etapa se o CVM de gateway público já tiver um endereço IP público.
    1. Faça login no console do CVM e selecione EIP na barra lateral esquerda.
    2. Localize o EIP para vincular a instância, selecione More (Mais) > Bind (Vincular) na coluna Operation (Operação).
    
    3. Na janela pop-up, selecione um CVM a ser configurado e vincule-o ao EIP.
    

    Etapa 2: configure uma tabela de rotas para a sub-rede do gateway

    Atenção:
    A sub-rede do gateway e outras sub-redes não podem compartilhar a mesma tabela de rotas. É necessário criar uma tabela de rotas separada para a sub-rede do gateway.
    2. Associe a tabela de rotas com a sub-rede onde o CVM de gateway público está localizado.
    

    Etapa 3: configure uma tabela de rotas para outras sub-redes

    Essa tabela de rotas direciona todo o tráfego dos CVMs sem um IP público para o gateway público, para que eles também possam acessar as redes públicas. Adicione as seguintes políticas de roteamento à tabela de rotas:
    Destination (Destino): o IP público que você deseja acessar.
    Next hop type (Tipo de próximo salto): CVM.
    Next hop (Próximo salto): o IP privado da instância do CVM ao qual o EIP foi vinculado na Etapa 1. Para obter mais informações, consulte Gerenciamento de tabela de rotas.
    

    Etapa 4: configure o gateway público

    1. Faça login no CVM de gateway público e execute as etapas abaixo para habilitar o encaminhamento de rede e o proxy NAT.
    1.1 Execute o seguinte comando para criar o script vpcGateway.sh em usr/local/sbin.
    vim /usr/local/sbin/vpcGateway.sh
    1.2 Pressione i para alternar ao modo de edição e adicione o seguinte código no script.
    #!/bin/bash
    echo "----------------------------------------------------"
    echo " `date`"
    echo "(1)ip_forward config......"
    file="/etc/sysctl.conf"
    grep -i "^net\\.ipv4\\.ip_forward.*" $file &>/dev/null && sed -i \\
    's/net\\.ipv4\\.ip_forward.*/net\\.ipv4\\.ip_forward = 1/' $file || \\
    echo "net.ipv4.ip_forward = 1" >> $file
    echo 1 >/proc/sys/net/ipv4/ip_forward
    [ `cat /proc/sys/net/ipv4/ip_forward` -eq 1 ] && echo "-->ip_forward:Success" || \\
    echo "-->ip_forward:Fail"
    echo "(2)Iptables set......"
    iptables -t nat -A POSTROUTING -j MASQUERADE && echo "-->nat:Success" || echo "-->nat:Fail"
    iptables -t mangle -A POSTROUTING -p tcp -j TCPOPTSTRIP --strip-options timestamp && \\
    echo "-->mangle:Success" || echo "-->mangle:Fail"
    echo "(3)nf_conntrack config......"
    echo 262144 > /sys/module/nf_conntrack/parameters/hashsize
    [ `cat /sys/module/nf_conntrack/parameters/hashsize` -eq 262144 ] && \\
    echo "-->hashsize:Success" || echo "-->hashsize:Fail"
    echo 1048576 > /proc/sys/net/netfilter/nf_conntrack_max
    [ `cat /proc/sys/net/netfilter/nf_conntrack_max` -eq 1048576 ] && \\
    echo "-->nf_conntrack_max:Success" || echo "-->nf_conntrack_max:Fail"
    echo 10800 >/proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established \\
    [ `cat /proc/sys/net/netfilter/nf_conntrack_tcp_timeout_established` -eq 10800 ] \\
    && echo "-->nf_conntrack_tcp_timeout_established:Success" || \\
    echo "-->nf_conntrack_tcp_timeout_established:Fail"
    1.3 Pressione Esc e digite :wq para salvar e fechar o arquivo.
    1.4 Execute o seguinte comando para definir a permissão do script.
    chmod +x /usr/local/sbin/vpcGateway.sh
    echo "/usr/local/sbin/vpcGateway.sh >/tmp/vpcGateway.log 2>&1" >> /etc/rc.local
    2. Defina o RPS do gateway público.
    2.1 Execute o seguinte comando para criar o script set_rps.sh em usr/local/sbin.
    vim /usr/local/sbin/set_rps.sh
    2.2 Pressione i para alternar ao modo de edição e adicione o seguinte código no script.
    # !/bin/bash
    echo "--------------------------------------------"
    date
    mask=0
    i=0
    total_nic_queues=0
    get_all_mask() {
    local cpu_nums=$1
    if [ $cpu_nums -gt 32 ]; then
    mask_tail=""
    mask_low32="ffffffff"
    idx=$((cpu_nums / 32))
    cpu_reset=$((cpu_nums - idx * 32))
    if [ $cpu_reset -eq 0 ]; then
    mask=$mask_low32
    for ((i = 2; i <= idx; i++)); do
    mask="$mask,$mask_low32"
    done
    else
    for ((i = 1; i <= idx; i++)); do
    mask_tail="$mask_tail,$mask_low32"
    done
    mask_head_num=$((2 ** cpu_reset - 1))
    mask=$(printf "%x%s" $mask_head_num $mask_tail)
    fi
    else
    mask_num=$((2 ** cpu_nums - 1))
    mask=$(printf "%x" $mask_num)
    fi
    echo $mask
    }
    set_rps() {
    if ! command -v ethtool &>/dev/null; then
    source /etc/profile
    fi
    ethtool=$(which ethtool)
    cpu_nums=$(cat /proc/cpuinfo | grep processor | wc -l)
    if [ $cpu_nums -eq 0 ]; then
    exit 0
    fi
    mask=$(get_all_mask $cpu_nums)
    echo "cpu number:$cpu_nums mask:0x$mask"
    ethSet=$(ls -d /sys/class/net/eth*)
    for entry in $ethSet; do
    eth=$(basename $entry)
    nic_queues=$(ls -l /sys/class/net/$eth/queues/ | grep rx- | wc -l)
    if (($nic_queues == 0)); then
    continue
    fi
    cat /proc/interrupts | grep "LiquidIO.*rxtx" &>/dev/null
    if [ $? -ne 0 ]; then # not smartnic
    #multi queue don't set rps
    max_combined=$(
    $ethtool -l $eth 2>/dev/null | grep -i "combined" | head -n 1 | awk '{print $2}'
    )
    #if ethtool -l $eth goes wrong.
    [[ ! "$max_combined" =~ ^[0-9]+$ ]] && max_combined=1
    if [ ${max_combined} -ge ${cpu_nums} ]; then
    echo "$eth has equally nic queue as cpu, don't set rps for it..."
    continue
    fi
    else
    echo "$eth is smartnic, set rps for it..."
    fi
    echo "eth:$eth queues:$nic_queues"
    total_nic_queues=$(($total_nic_queues + $nic_queues))
    i=0
    while (($i < $nic_queues)); do
    echo $mask >/sys/class/net/$eth/queues/rx-$i/rps_cpus
    echo 4096 >/sys/class/net/$eth/queues/rx-$i/rps_flow_cnt
    i=$(($i + 1))
    done
    done
    flow_entries=$((total_nic_queues * 4096))
    echo "total_nic_queues:$total_nic_queues flow_entries:$flow_entries"
    echo $flow_entries >/proc/sys/net/core/rps_sock_flow_entries
    }
    set_rps
    2.3 Pressione Esc e digite :wq para salvar e fechar o arquivo.
    2.4 Execute o seguinte comando para definir a permissão do script.
    chmod +x /usr/local/sbin/set_rps.sh
    echo "/usr/local/sbin/set_rps.sh >/tmp/setRps.log 2>&1" >> /etc/rc.local
    chmod +x /etc/rc.d/rc.local
    3. Reinicie o CVM de gateway público para aplicar as configurações. Depois, teste se um CVM sem um IP público consegue acessar a internet pelo CVM de gateway público.
    Fale conosco

    Fale com nossa equipe de vendas ou nossos consultores e ajude sua empresa.

    Suporte técnico

    Abra um tíquete caso precise de mais assistência. Nosso suporte está disponível 24 horas por dia.

    Suporte ininterrupto por telefone