注意:2019年12月6日后,腾讯云将不支持在云服务器购买页勾选配置公网网关。如果您有需要,请按照本文所示方法自行配置。
当您在腾讯云 VPC 中的部分云服务器没有普通公网 IP,但需要访问公网时,可以利用带有公网 IP(普通公网 IP 或弹性公网 IP) 的云服务器访问公网。公网网关云服务器将对出网流量进行源地址转换,所有其他云服务器访问公网的流量经过公网网关云服务器后,源 IP 都被转换为公网网关云服务器的公网 IP 地址,如下图所示:
说明:如果用作公网网关的云服务器已经有公网 IP 地址,请跳过此步骤,完成后续步骤。
注意:网关子网和普通子网不能关联同一张路由表,需要新建一张独立的网关路由表,并将网关子网关联该路由表。
配置普通子网的路由表,配置默认路由走公网网关云服务器,使得普通子网内的云服务器能通过公网网关的路由转发能力访问公网。
在普通云服务器所在子网的路由表中,新增如下路由策略:
usr/local/sbin
目录下新建脚本vpcGateway.sh
。vim /usr/local/sbin/vpcGateway.sh
#!/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"
chmod +x /usr/local/sbin/vpcGateway.sh
echo "/usr/local/sbin/vpcGateway.sh >/tmp/vpcGateway.log 2>&1" >> /etc/rc.local
usr/local/sbin
目录下新建脚本set_rps.sh
。vim /usr/local/sbin/set_rps.sh
# !/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
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
近期,OceanBase 云平台(OceanBase Cloud Platform,OCP)发布了 V3.1.1版本。...
问题描述 云手机目前没有自带浏览器或相关应用市场,如果您想要在云手机内安装AP...
.shop电商 域名 的德国合作注册商InterNetX和 域名交易 平台Sedo在2020年2月联名...
案例背景 “人民日报的带货能力太强大了,昨晚一大波流量进来抢药,我们的服务器...
客户简介 二十国集团(G20)由七国集团财长会议于1999年倡议成立,由阿根廷、澳...
腾讯云最新一代全新服务器 标准型 S5 包年包月价格调整: 标准型 S5 规格 降幅 S...
虽说不同构建工具在原理上是大同小异,但下一篇也应该写写 vite 了。 Loader 和 ...
一、getProperties()方法 1.System类提供一个getProperties()方法用来获取当前系...
开通镜像仓库常见问题 命名空间有什么作用? 命名空间是标识用户私人镜像的地址...
相比VNC,Workbench支持多用户远程连接同一台实例,并且支持可视化管理Linux实例...