tencent cloud

Cloud Virtual Machine

ドキュメントCloud Virtual Machineユーザーガイドネットワークパブリックネットワークゲートウェイの設定

パブリックネットワークゲートウェイの設定

PDF
フォーカスモード
フォントサイズ
最終更新日: 2023-02-16 10:20:28
警告:
単一のCloud Virtual Machine(CVM)をパブリックゲートウェイとして使用すると、シングルポイントリスクがあるため、本番環境では NAT Gateway を使用することをお勧めします。
注意:2019年12月06日以降、Tencent Cloudは、CVMの購入ページでのパブリックゲートウェイの選択と設定をサポートしません。必要に応じて、このドキュメントでの設定に従って、ご自身で設定してください。

概要

Tencent Cloud VPCの一部のCVMに共通のパブリックネットワークIPがないが、パブリックネットワークにアクセスする必要がある場合は、パブリックネットワークIP(共通のパブリックネットワークIPまたはElasticパブリックネットワークIP)を備えたCVMを使用してパブリックネットワークにアクセスできます。パブリックゲートウェイCVMは、アウトバウンドトラフィックのソースアドレス変換を実行します。他のすべてのCVMがパブリックネットワークにアクセスするトラフィックは、パブリックゲートウェイCVMを通過した後、ソースIPがパブリックゲートウェイCVMのパブリックネットワークIPアドレスに変換されます。下図の通りです:



前提条件

すでに CVMコンソール ログインしています。
パブリックゲートウェイCVMは、配置されているサブネット上にないルートの転送要求のみを転送できるため、パブリックゲートウェイCVMは、パブリックゲートウェイを使用してパブリックネットワークにアクセスする必要があるCVMと同じサブネット内に存在することはできません。
パブリックゲートウェイCVMはLinux CVMである必要があります。Windows CVMをパブリックゲートウェイとして使用することはできません。

操作手順

手順1:Elasticパブリックネットワークへのバインディング(オプション)

説明:
パブリックゲートウェイとして使用されるCVMにすでにパブリックネットワークIPアドレスがある場合は、この手順をスキップして次の手順を完了してください。
1. CVMコンソール にログインし、左側ナビゲーションバーでは、 ElasticパブリックネットワークIP をクリックして、ElasticパブリックネットワークIP管理ページへ進みます。
2. インスタンスをバインディングする必要があるElasticパブリックネットワークIPのアクションバーの下にあるその他 > バインディングを選択します。


3. 「リソースのバインディング」ポップアップボックスで、パブリックゲートウェイとして選択されたCVMインスタンスを選択してバインディングします。



手順2:ゲートウェイが配置されているサブネットのルートテーブルの設定

ご注意:
ゲートウェイサブネットと共通サブネットを同じルートテーブルにアソシエイトすることはできません。独立したゲートウェイルートテーブルを作成し、ゲートウェイサブネットをこのルートテーブルにアソシエイトしてください。
2. 作成後、サブネットへのアソシエイトアクションが要求されます。パブリックゲートウェイサーバーが配置されているサブネットを直接アソシエイトすることができます。



手順3:共通サブネットのルートテーブルの設定

共通サブネットのルートテーブルを設定します。デフォルトでルーティングがパブリックゲートウェイCVMを経由することで、共通サブネット内のCVMがパブリックゲートウェイのルーティング転送機能によってパブリックネットワークにアクセスできるように設定します。 共通CVMが配置されているサブネットのルートテーブルに、次のルーティングポリシーを追加します:
ターゲット側:アクセスするパブリックネットワークアドレス。
ネクストホップタイプ:CVM。
ネクストホップ:手順1でElasticパブリックネットワークIPにバインディングされたCVMインスタンスのプライベートネットワークIP。 具体的な操作については、ルーティングポリシーの設定 をご参照ください。



手順4:パブリックゲートウェイの設定

1. パブリックゲートウェイCVM にログインし、次の操作を実行してネットワーク転送およびNATプロキシ機能を有効にします。
1.1 次のコマンドを実行して、usr/local/sbinディレクトリにスクリプトvpcGateway.shを新規作成します。
vim /usr/local/sbin/vpcGateway.sh
1.2 iを押して編集モードに切り替え、次のコードをスクリプトに書き込みます。
#!/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 Escを押し、 :wq を入力して、ファイルを保存して戻ります。
1.4 次のコマンドを実行して、スクリプトファイルの権限を設定します。
chmod +x /usr/local/sbin/vpcGateway.sh
echo "/usr/local/sbin/vpcGateway.sh >/tmp/vpcGateway.log 2>&1" >> /etc/rc.local
2. パブリックゲートウェイのrpsの設定:
2.1 次のコマンドを実行して、usr/local/sbinディレクトリにスクリプトset_rps.shを新規作成します。
vim /usr/local/sbin/set_rps.sh
2.2 iを押して編集モードに切り替え、次のコードをスクリプトに書き込みます。
# !/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 Escを押して、 :wq を入力し、ファイルを保存して戻ります。
2.4 次のコマンドを実行して、スクリプトファイルの権限を設定します。
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. 上記の設定が完了すると、パブリックゲートウェイCVMをリスタートして設定を有効にし、パブリックネットワークIPがないCVMで、パブリックネットワークに正常にアクセスできるかどうかをテストします。


ヘルプとサポート

この記事はお役に立ちましたか?

フィードバック