经常会用到的GRE,QPS较高时使用GRE更加可靠
隧道设置
首先,我们需要设置我们的隧道。
在您的 BuyVM VPS 上,请执行以下命令:
echo 'net.ipv4.ip_forward=1' >> /etc/sysctl.conf sysctl -p iptunnel 添加 gre1 模式 gre 本地 YOUR_UNFILTERED_IP 远程 DESTINATION_SERVER_IP ttl 255 ip 地址添加 192.168.168.1/30 dev gre1 ip 链接设置 gre1
在您希望保护的远程服务器上运行以下命令:
iptunnel 添加 gre1 模式 gre 本地 DESTINATION_SERVER_IP 远程 YOUR_UNFILTERED_IP ttl 255 ip 地址添加 192.168.168.2/30 dev gre1 ip 链接设置 gre1
您将始终希望使用所有 GRE 隧道的未过滤IP 地址形成 GRE,以确保不会遇到任何类型的 MTU 问题或触发 DDOS 保护。
请注意每个更改的第一行,以标记本地使用哪些 IP 以及远程使用哪些 IP。第二行记录每个端点。在 /30 中,2 个 IP 可用:.1 和 .2。
使用 Ping 测试您的新 GRE 隧道
在您的 BuyVM VPS 上,您现在应该可以 ping 192.168.168.2
.
为完整起见,请192.168.168.1
从目标服务器测试 ping 。
设置源路由表
需要源路由条目以确保通过 GRE 隧道传入的数据从 GRE 隧道发回。
请在目标服务器上执行以下命令。
回声'100 BUYVM'>> /etc/iproute2/rt_tables 从 192.168.168.0/30 表 BUYVM 添加 ip 规则 ip route add default via 192.168.168.1 table BUYVM
请注意,echo 命令只需要运行一次。该条目将保存到 /etc/iproute2/rt_tables 中,直到您手动将其删除。
通过 GRE 隧道移动数据的初始 NAT 条目
NAT 用于通过我们的 GRE 并从另一端传递数据。
虽然可以通过购买的 /29 分配使用基于 KVM 的 VPS,但本指南并未涵盖这一点。
在您的 BuyVM VPS 上运行以下命令:
iptables -t nat -A POSTROUTING -s 192.168.168.0/30 !-o gre+ -j SNAT --to-source YOUR_FILTERED_IP
测试出站连接
在目标服务器上,您可以运行以下任一命令来查看隧道是否正确传递流量:
curl http://www.cpanel.net/showip.cgi --interface 192.168.168.2
wget http://www.cpanel.net/showip.cgi --bind-address=192.168.168.2 -q -O -
转储的 IP 应该是您的 BuyVM 过滤 IP。
通过 GRE 隧道转发端口
为方便起见,我们将所有端口转发到后端服务器。
在您的 BuyVM VPS 上运行以下命令:
iptables -t nat -A PREROUTING -d YOUR_FILTERED_IP -j DNAT --to-destination 192.168.168.2 iptables -A FORWARD -d 192.168.168.2 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
如果您想获得更具体的信息,可以添加:
-p tcp --dport 25565
例如,如果您只是想保护 Minecraft 服务器。
第一条规则设置实际的端口转发,第二条规则确保连接得到 NAT 并正确匹配。
此时,您应该能够YOUR_FILTERED_IP
使用您的应用程序连接到目标端口,并顺利通过 GRE 隧道。
重新启动后重新启动您的 GRE 隧道
您可以/etc/rc.local
使用您最喜欢的编辑器(甚至 WINSCP)进行编辑,并将我们刚刚运行的所有命令exit 0
放在底部之前。
您选择的发行版(如 Debian)可能会/etc/network/interfaces
在启动时启动 GRE 隧道,但这超出了本指南的范围。
方法2
出口端
ip tunnel add gre-tunnel mode gre remote $client_ipv4 ttl 128
ip link set gre-tunnel up
ip addr add 2402:9e80:2b:b::1/64 dev gre-tunnel
sysctl net.ipv6.conf.all.forwarding=1
sysctl net.ipv6.conf.all.proxy_ndp=1
$client_ipv4
为入口端IP地址
入口端
ip tunnel add gre-tunnel mode gre remote $server_ipv4 ttl 128
ip link set gre-tunnel up
ip addr add 2402:9e80:2b:b::2/64 dev gre-tunnel
ip -6 route add default dev gre-tunnel # 会转发所有IPv6流量
$server_ipv4
为出口端IP地址
测试
可以通过互ping来测试隧道搭建情况
维护
# 删除
ip link set gre-tunnel down
ip tunnel del gre-tunnel
# 修改IP
ip tunnel change gre-tunnel remote $new_client_ipv4