过去一周,我一直尝试利用从 VPS 到专用机器的 GRE 隧道来保护服务器免受 DOS 攻击,但没有取得多大成功。
视觉的:
User --> VPS --> Dedicated Server
我遵循了几个指南购买VM和Minecraft DDOS 保护并根据需要进行修改。
我目前所做的:
两台机器都加载了以下内核模块
ip_gre
ip_nat_pptp
ip_conntrack_pptp
此外,两台机器都启用了 IPv4 端口转发。
在专用机器上设置 GRE:
ip tunnel add veridian mode gre remote VPS_EXTERN_IP local DEDICATED_EXTERN_IP ttl 255
ip link set veridian up
ip addr add 10.10.10.1/24 dev veridian
这将产生界面:
veridian Link encap:UNSPEC HWaddr 3F-8D-F2-FA-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.10.10.1 P-t-P:10.10.10.1 Mask:255.255.255.0
inet6 addr: fe80::200:5efe:3f8d:f2fa/64 Scope:Link
UP POINTOPOINT RUNNING NOARP MTU:1476 Metric:1
RX packets:4016 errors:0 dropped:0 overruns:0 frame:0
TX packets:3970 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:338404 (338.4 KB) TX bytes:359357 (359.3 KB)
在 VPS 上设置 GRE
ip tunnel add gre1 mode gre remote DEDICATED_EXTERN_IP local VPS_EXTERN_IP ttl 255
ip link set gre1 up
ip addr add 10.10.10.2/24 dev gre1
这将产生界面:
gre1 Link encap:UNSPEC HWaddr 68-83-98-C8-00-00-00-00-00-00-00-00-00-00-00-00
inet addr:10.10.10.2 P-t-P:10.10.10.2 Mask:255.255.255.0
inet6 addr: fe80::200:5efe:6883:98c8/64 Scope:Link
UP POINTOPOINT RUNNING NOARP MTU:1476 Metric:1
RX packets:3743 errors:0 dropped:0 overruns:0 frame:0
TX packets:3811 errors:0 dropped:0 overruns:0 carrier:0
collisions:0 txqueuelen:0
RX bytes:314188 (314.1 KB) TX bytes:335587 (335.5 KB)
将 VPS 接口 IP 添加到专用服务器上的源路由表:
echo '100 VERIDIAN' >> /etc/iproute2/rt_tables
ip rule add from 10.10.10.0/24 table VERIDIAN
ip route add default via 10.10.10.2 table VERIDIAN
什么有效
从这里我可以从 VPS 成功 ping 专用服务器
ping 10.10.10.1
反之亦然
ping 10.10.10.2
此外,当我在 VPS 上设置 NAT 条目时
iptables -t nat -A POSTROUTING -s 10.10.10.0/24 -j SNAT --to-source VPS_EXTERN_IP
我可以通过运行以下命令从专用服务器成功检索 VPS 的外部 IP:
curl http://www.cpanel.net/showip.cgi --interface 10.10.10.1
不起作用的方法——端口转发
我现在在 VPS 上运行:
iptables -t nat -A PREROUTING -p tcp -d VPS_EXTERN_IP --dport 25565 -j DNAT --to-destination 10.10.10.1:25565
iptables -A FORWARD -p tcp -d 10.10.10.1 --dport 25565 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
我现在尝试通过 VPS 的外部 IP 地址连接到游戏服务器,但没有成功。
我已经与此斗争了一个多星期,任何帮助都将不胜感激。
更新
以上所有内容均正确。
经过更多的调试,我发现当为游戏实例设置外部 IP 时,游戏服务器的包装器守护进程(Multicraft)会阻止本地主机连接。
解决方案是将 IP 设置为 0.0.0.0,端口转发即可完美运行。
答案1
由于我在您显示的文档中没有看到它,所以我假设您忘记启用 IP 转发。
运行以下命令来验证确实如此:
sysctl net.ipv4.ip_forward
如果 IP 转发确实被禁用,您应该看到:
net.ipv4.ip_forward = 0
如果这是您的问题,请运行:
sysctl -w net.ipv4.ip_forward=1
您的问题可能是端口未打开/防火墙阻止了端口。
您可以使用 nmap 轻松地从 VPS 到专用机器进行测试:
nmap -A 10.10.10.2/24 -p 25565
并以相同的方式从您的客户端机器到您的外部可访问的机器,但10.10.10.2
用您的 VPS 外部地址替换。