GRE 隧道

May 3, 2007 0 comments

 


经常会用到的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




Related Posts

{{posts[0].title}}

{{posts[0].date}} {{posts[0].commentsNum}} {{messages_comments}}

{{posts[1].title}}

{{posts[1].date}} {{posts[1].commentsNum}} {{messages_comments}}

{{posts[2].title}}

{{posts[2].date}} {{posts[2].commentsNum}} {{messages_comments}}

{{posts[3].title}}

{{posts[3].date}} {{posts[3].commentsNum}} {{messages_comments}}

联系人表单