如何为同一目标后端服务器配置两个不同IP的GRE隧道?
如何为同一目标后端服务器配置两个不同IP的GRE隧道?
我手里有一台BuyVM的KVM VPS,它带两个DDoS防护IP,我的需求是通过GRE隧道,用BuyVM的防护IP来替代我的主服务器(后面都叫它「后端服务器」)的IP。研究了GRE隧道的配置方法后,我整理出了下面的脚本,分两端来操作:
BuyVM VPS端配置脚本
把下面的脚本保存到BuyVM VPS上,记得替换掉变量里的占位内容:
#!/bin/bash # 此脚本部署在BuyVM的GRE VPS上 # 配置变量 GRE_VPS_IP="[替换为BuyVM的DDoS防护IP]" BACKEND_IP="[替换为后端服务器的公网IP]" GRE_VPS_MAIN_INTERFACE="eth0" # 根据VPS实际网卡调整,一般是eth0 GRE_TUNNEL_NAME="gre1" GRE_TUNNEL_SUBNET="192.168.168.0/30" GRE_TUNNEL_LOCAL_IP="192.168.168.1" GRE_TUNNEL_REMOTE_IP="192.168.168.2" # 开启IP转发 echo 1 > /proc/sys/net/ipv4/ip_forward # 创建GRE隧道 ip tunnel add $GRE_TUNNEL_NAME mode gre remote $BACKEND_IP local $GRE_VPS_IP ttl 255 # 为隧道接口分配IP ip addr add $GRE_TUNNEL_LOCAL_IP/30 dev $GRE_TUNNEL_NAME # 启用隧道接口 ip link set $GRE_TUNNEL_NAME up # 添加路由,让后端服务器的流量走隧道 ip route add $BACKEND_IP dev $GRE_TUNNEL_NAME # 配置iptables NAT转发,让隧道流量能通过主网卡出去 iptables -t nat -A POSTROUTING -o $GRE_VPS_MAIN_INTERFACE -j MASQUERADE iptables -A FORWARD -i $GRE_VPS_MAIN_INTERFACE -o $GRE_TUNNEL_NAME -m state --state RELATED,ESTABLISHED -j ACCEPT iptables -A FORWARD -i $GRE_TUNNEL_NAME -o $GRE_VPS_MAIN_INTERFACE -j ACCEPT
后端服务器端配置脚本
同样,把下面的脚本部署到你的后端服务器上,替换对应变量:
#!/bin/bash # 此脚本部署在后端服务器上 # 配置变量 BACKEND_IP="[替换为后端服务器的公网IP]" GRE_VPS_IP="[替换为BuyVM的DDoS防护IP]" BACKEND_MAIN_INTERFACE="eth0" # 根据服务器实际网卡调整 GRE_TUNNEL_NAME="gre1" GRE_TUNNEL_LOCAL_IP="192.168.168.2" GRE_TUNNEL_REMOTE_IP="192.168.168.1" # 开启IP转发 echo 1 > /proc/sys/net/ipv4/ip_forward # 创建GRE隧道 ip tunnel add $GRE_TUNNEL_NAME mode gre remote $GRE_VPS_IP local $BACKEND_IP ttl 255 # 为隧道接口分配IP ip addr add $GRE_TUNNEL_LOCAL_IP/30 dev $GRE_TUNNEL_NAME # 启用隧道接口 ip link set $GRE_TUNNEL_NAME up # 添加路由,让BuyVM VPS的流量走隧道 ip route add $GRE_VPS_IP dev $GRE_TUNNEL_NAME # (可选)如果需要把特定端口的流量转发到本地服务,可以添加下面的iptables规则 # 比如转发80端口到本地服务IP: # iptables -t nat -A PREROUTING -i $BACKEND_MAIN_INTERFACE -p tcp --dport 80 -j DNAT --to-destination [你的服务内网IP] # iptables -A FORWARD -i $GRE_TUNNEL_NAME -o $BACKEND_MAIN_INTERFACE -j ACCEPT
配置第二个DDoS防护IP的隧道
如果要给第二个BuyVM的DDoS防护IP也配置隧道,只需要复制上面的两组脚本,做以下修改:
- 把隧道接口名改成
gre2(避免冲突) - 更换隧道子网,比如用
192.168.169.0/30,对应本地IP设为192.168.169.1(BuyVM端)和192.168.169.2(后端服务器端) - 把
GRE_VPS_IP替换成第二个DDoS防护IP
这样就能实现用两个不同的BuyVM防护IP通过GRE隧道转发到同一台后端服务器了。
备注:内容来源于stack exchange,提问作者Mario
相关产品推荐
相关产品推荐

