| 主机参考:VPS测评参考推荐/专注分享VPS服务器优惠信息!若您是商家可以在本站进行投稿,查看详情!此外我们还提供软文收录、PayPal代付、广告赞助等服务,查看详情! |
| 我们发布的部分优惠活动文章可能存在时效性,购买时建议在本站搜索商家名称可查看相关文章充分了解该商家!若非中文页面可使用Edge浏览器同步翻译!PayPal代付/收录合作 |
当您的腾讯云VPC中的部分云服务器没有公共公网IP,但需要访问公网时,您可以使用有公网IP(普通公网IP或弹性公网IP)的云服务器访问公共网络。公网网关云服务器将对传出的网络流量进行源地址转换。其他所有云服务器通过公网网关云服务器访问公网流量后,将源IP转换为公网网关云服务器的公网IP地址,如下图:

先决条件
1、 登录云服务器控制台。
2、公网网关云服务器只能转发不在其所在子网内的路由转发请求。因此,公网网关云服务器不能与需要使用公网网关访问公网的云服务器在同一子网。 .
3、公网网关云服务器必须是Linux云服务器,Windows云服务器不能作为公网网关。
操作步骤
第一步:绑定弹性IP(可选)
说明:
如果作为公网网关的云服务器已有公网IP地址,请跳过此步骤,完成后续步骤。
1、登录云服务器控制台,点击左侧导航栏中的【弹性公网IP】,进入弹性公网IP管理页面。
2、在要绑定实例的弹性公网IP操作栏中,选择【更多】>【绑定】。

3、在“绑定资源”弹出框中,选择一个选为公网网关的CVM实例进行绑定。

第二步:配置网关所在子网的路由表
网关子网和公共子网不能关联同一张路由表。需要创建独立的网关路由表,并将网关子网与路由表关联起来。
1、创建自定义路由表。
2、创建后会提示关联子网操作,可以直接关联公网网关服务器所在的子网。

第三步:配置公共子网路由表
配置公共子网的路由表,并配置默认路由到公网网关云服务器,使公共子网中的云服务器可以通过公网的路由转发能力访问公网网络网关。
在普通云服务器所在子网的路由表中,添加如下路由策略:
Destination:你要访问的公网地址。
下一跳类型:云服务器。
下一跳:步骤1绑定EIP的ECS实例的内网IP。 
第四步:配置公网网关
1、登录公网网关云服务器,进行如下操作,开启网络转发和NAT代理功能。
执行以下命令,在usr/local/sbin目录下新建脚本vpcGateway.sh。
vim /usr/local/sbin/vpcGateway.sh 按 “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 timest \ 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"
按“Esc”,输入“:wq”,保存文件并返回。
执行以下命令设置脚本文件权限。
chmod +x /usr/local/sbin/vpcGateway.sh echo "/usr/local/sbin/vpcGateway.sh >/tmp/vpcGateway.log 2>1" >> /etc/rc.local
2、设置公网网关的rps:
执行如下命令,在usr/local/sbin目录下新建脚本set_rps.sh。
vim /usr/local/sbin/set_rps.sh
按“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
按“Esc”,输入“:wq”,保存文件并返回。
执行以下命令设置脚本文件权限。
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、完成上述配置后,重启公网网关云服务器,使配置生效,并在没有公网IP的云服务器上测试是否可以成功访问公网。
这几篇文章你可能也喜欢:
- 暂无相关推荐文章
本文由主机参考刊发,转载请注明:腾讯云VPC配置公网网关:腾讯云私有网络配置云服务器为公网网关的操作步骤 https://zhujicankao.com/68200.html
主机参考















评论前必须登录!
注册