云服务器 配置公网网关

2019年12月06日后,腾讯云不支持在云服务器购买页勾选配置公网网关。如果你有需要,请按照这篇所示方法自行配置。

相关产品
云服务器 产品页,含版本规格、价格与购买入口。

注意:警告:

注意:使用单台云服务器 CVM 作为公网网关存在单点故障风险,生产环境建议使用 NAT 网关。

一、操作场景

当你在腾讯云 VPC 中的部分云服务器没有普通公网 IP,但需要访问公网时,可以利用带有公网 IP(普通公网 IP 或弹性公网 IP) 的云服务器访问公网。公网网关云服务器将对出网流量进行源地址转换,所有其他云服务器访问公网的流量经过公网网关云服务器后,源 IP 都被转换为公网网关云服务器的公网 IP 地址:


二、前提条件

·已登录 云服务器控制台。

·公网网关云服务器必须为 Linux 云服务器,Windows 云服务器无法作为公网网关使用。

·公网网关云服务器只能转发其他子网的请求,因此不能与需要通过该网关访问公网的普通云服务器处于同一子网。

三、步骤1:绑定弹性公网 IP(可选)

注意:说明:

注意:如果用作公网网关的云服务器已经有公网 IP 地址,请跳过此步骤,完成后续步骤。

1. 在 云服务器控制台 左侧导航栏,单击 公网 IP。

2. 选择你计划为公网网关云服务器绑定的公网 IP 地址,单击公网 IP 地址所在行的更多 > 绑定按钮。

3. 在绑定资源弹框中,选择你计划作为公网网关的 CVM 实例,单击确定。

四、步骤2:配置网关所在子网路由表

注意:网关子网和普通子网不能关联同一张路由表,需要新建一张独立的网关路由表,并将网关子网关联该路由表。

1. 登录 私有网络控制台,单击左侧目录中的路由表,进入路由表管理页面。

2. 单击新建,填写路由表名称,选择公网网关云服务器所属网络,新增默认路由策略,确认无误后,单击创建。

3. 自定义路由表创建完成后,你可以按照弹窗提醒,选择公网网关云服务器所在子网,单击确定。

五、步骤3:配置普通子网路由表

通过配置普通子网的路由表,可使普通子网内的云服务器能通过公网网关的路由转发能力访问公网。

在普通云服务器所在子网的路由表中,新增如下路由策略:

·目的端:你要访问的公网地址,作为默认路由时,目的端可输入0.0.0.0。

·下一跳类型:云服务器。

·下一跳:步骤1中绑定弹性公网 IP 的云服务器实例的内网 IP。
具体操作请参见 配置路由策略。

六、步骤4:配置公网网关

1. 登录 公网网关云服务器,执行如下操作开启网络转发及NAT 代理功能。

1.1 执行如下命令,在/usr/local/sbin目录下新建脚本vpcGateway.sh。

vim /usr/local/sbin/vpcGateway.sh

1.2 按 i 切换至编辑模式,将如下代码写入脚本中。

#!/bin/bashecho "—————————————————-"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" >> $fileecho 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 -o lo -m addrtype –src-type LOCAL -j ACCEPTiptables -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.shecho "/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/bashecho "——————————————–"datemask=0i=0total_nic_queues=0get_all_mask() {local cpu_nums=$1if [ $cpu_nums -gt 32 ]; thenmask_tail=""mask_low32="ffffffff"idx=$((cpu_nums / 32))cpu_reset=$((cpu_nums – idx * 32))if [ $cpu_reset -eq 0 ]; thenmask=$mask_low32for ((i = 2; i <= idx; i++)); domask="$mask,$mask_low32"doneelsefor ((i = 1; i <= idx; i++)); domask_tail="$mask_tail,$mask_low32"donemask_head_num=$((2 ** cpu_reset – 1))mask=$(printf "%x%s" $mask_head_num $mask_tail)fielsemask_num=$((2 ** cpu_nums – 1))mask=$(printf "%x" $mask_num)fiecho $mask}set_rps() {if ! command -v ethtool &>/dev/null; thensource /etc/profilefiethtool=$(which ethtool)cpu_nums=$(cat /proc/cpuinfo | grep processor | wc -l)if [ $cpu_nums -eq 0 ]; thenexit 0fimask=$(get_all_mask $cpu_nums)echo "cpu number:$cpu_nums mask:0x$mask"ethSet=$(ls -d /sys/class/net/eth*)for entry in $ethSet; doeth=$(basename $entry)nic_queues=$(ls -l /sys/class/net/$eth/queues/ | grep rx- | wc -l)if (($nic_queues == 0)); thencontinueficat /proc/interrupts | grep "LiquidIO.*rxtx" &>/dev/nullif [ $? -ne 0 ]; then # not smartnic#multi queue don't set rpsmax_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=1if [ ${max_combined} -ge ${cpu_nums} ]; thenecho "$eth has equally nic queue as cpu, don't set rps for it…"continuefielseecho "$eth is smartnic, set rps for it…"fiecho "eth:$eth queues:$nic_queues"total_nic_queues=$(($total_nic_queues + $nic_queues))i=0while (($i < $nic_queues)); doecho $mask >/sys/class/net/$eth/queues/rx-$i/rps_cpusecho 4096 >/sys/class/net/$eth/queues/rx-$i/rps_flow_cnti=$(($i + 1))donedoneflow_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.shecho "/usr/local/sbin/set_rps.sh >/tmp/setRps.log 2>&1" >> /etc/rc.localchmod +x /etc/rc.d/rc.local

3. 完成上述配置后,重启公网网关云服务器使配置生效,并在无公网 IP 的云服务器上,测试是否能够成功访问公网。

赞 (0)
上一篇 4天前
下一篇 4天前