tencent cloud

Cloud Virtual Machine

最新情報とお知らせ
製品情報
パブリックイメージの更新情報
OSの公式サポート終了計画
製品に関するお知らせ
製品概要
CVM概要
製品の強み
基本概念
リージョンとゾーン
初心者ガイド
Service Regions and Service Providers
製品の課金
課金概要
課金モデル
課金項目
課金モデルの変更
購入インスタンス
仕様変更の料金説明
料金未払いに関する説明
クイックスタート
カスタム設定によるLinuxインスタンスの購入
カスタム設定によるWindowsインスタンスの購入
ユーザーガイド
操作ガイド一覧
ご利用制限一覧
インスタンス
スポットインスタンス
リザーブドインスタンス
イメージ
ストレージ
バックアップと復元
ネットワーク
セキュリティ
パスワード/キー
監視とアラート
運用管理
便利な機能
サーバー移行
オンライン移行
オフライン移行
移行に関するご相談
トラブルシューティング
CVMインスタンスにログインできない原因や対処法
Windowsインスタンスのログインに関する障害
Linuxインスタンスのログインに関する障害
その他のインスタンスログインに関する障害
インスタンス実行時の障害
Linuxインスタンスのメモリに関する障害
ネットワーク障害
実践チュートリアル
CVMの選定ガイド
環境構築
ウェブサイトの構築
アプリケーションの構築
可視化ページの構築
ローカルファイルをCVMへアップロード
ネットワークパフォーマンステスト
その他の実践チュートリアル
API リファレンス
History
Introduction
API Category
Making API Requests
Region APIs
Instance APIs
Cloud Hosting Cluster APIs
Image APIs
Instance Launch Template APIs
Placement Group APIs
Key APIs
Security Group APIs
Network APIs
Data Types
Error Codes
セキュリティとコンプライアンス
Cloud Access Management(CAM)
ネットワーク
よくあるご質問
リージョンとアベイラビリティゾーンに関するご質問
課金クラス
インスタンスに関するご質問
ストレージに関するご質問
イメージに関するご質問
サーバー移行について
ネットワークに関するご質問
セキュリティに関するご質問
OSに関するご質問
運用と監視に関するご質問
CAMに関するご質問
NTPサービスに関するご質問
適用シナリオに関するご質問
Agreements
CVM Service Level Agreements
Red Hat Enterprise Linux Image Service Agreement
Public IP Service Level Agreement
用語集
ドキュメント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で、パブリックネットワークに正常にアクセスできるかどうかをテストします。


ヘルプとサポート

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

フィードバック