在两台CentOS 7服务器之间建立GRE隧道

本文copy自:http://www.codejie.net

实验配置:aws的弗吉尼亚州 和 首尔 两个1h1g的机器。

介绍

什么是GRE?有哪些优势?

GRE代表Generic Routing Encapsulation(通用路由封装),它允许两台服务器私下通信。GRE隧道非常有用,因为它们允许所有类型的流量通过。它相对容易设置且安全(假设在服务器A和服务器B之间具有直接管道)。

简而言之:创建GRE隧道允许以最小的资源使用量转发数据包。

注意:必须在两个端点上建立GRE隧道。
它是如何工作的?

在服务器上创建GRE隧道时,服务器将充当虚拟路由器。请记住,由于数据包是通过多个网络发送的,因此两端都需要一个公共IP地址。

先决条件和配置两个端点

设置GRE隧道所需的条件

幸运的是,您需要做的是:

2台运行CentOS 7的服务器
该ip_gre模块加载
nano 或任何文本编辑器

如果尚未将GRE模块加载到任一服务器中,请执行以下命令:

modprobe ip_gre

输入前后对比(会添加一个虚拟网卡的):

undefined

我们将使用的IP地址如下:

端点A:

本地/内部IP: 172.26.7.179
公用IP: 3.36.160.20

端点B:

本地/内部IP: 172.26.14.125
公用IP: 52.207.192.24

请记住,您将需要修改示例IP地址(更改使用将要使用的两台服务器的IP地址)。

配置端点A

首先,我们需要转到network-scripts文件夹:

cd /etc/sysconfig/network-scripts

现在,使用nano或您喜欢的文本编辑器创建一个名为的文件ifcfg-tun0

vim ifcfg-tun0

在新创建的文件中,粘贴以下内容:

DEVICE=tun0
BOOTPROTO=none
ONBOOT=yes
    DEVICETYPE=tunnel
TYPE=GRE
PEER_INNER_IPADDR=172.26.14.125
PEER_OUTER_IPADDR=52.207.192.24
MY_INNER_IPADDR=172.26.7.179

保存并退出(esc然后输入:wq)。

调出界面:

ifup tun0

一旦执行了上面的命令,就可以开始配置第二个端点。

配置端点B

配置此端点的过程与第一个端点的过程相似。首先,转到您的network-scripts文件夹:

cd /etc/sysconfig/network-scripts

现在,创建一个名为的新文件ifcfg-tun0:

vim ifcfg-tun0 

粘贴以下内容:

DEVICE=tun0
BOOTPROTO=none
ONBOOT=yes
TYPE=GRE
PEER_INNER_IPADDR=172.26.7.179
PEER_OUTER_IPADDR=3.36.160.20
MY_INNER_IPADDR=172.26.14.125

退出并保存。

现在,您可以启动界面:

ifup tun0

测试隧道

在端点A上,输入以下内容:

ping 172.26.14.125

您将看到类似的输出:

在端点B上:

ping 172.26.7.179

您将看到类似的输出:

undefined

如果两端可以ping彼此成功进行,则可以跳到本文的最后一节。如果超时,则可能需要禁用防火墙或将适当的地址列入白名单。

如果仅希望测试隧道是否正常工作,则可以(由您自担风险)在两台服务器上禁用防火墙:

service firewalld stop

某些CentOS 7系统具有IPTable,因此,如果以上命令不起作用,请执行以下操作:

service iptables stop

结论

您已经成功在两台服务器之间建立了GRE隧道。

如果您希望将来删除隧道,请在两台服务器上执行以下操作:

ifdown tun0
rm -rf /etc/sysconfig/network-scripts/ifcfg-tun0
service network restart

三.其他

①.调整隧道MTU(两端都需要)

调整后需要重起隧道(ifdown然后ifup)

ifconfig 隧道接口名 mtu 1500

②.启用ipv4转发以及关闭rp_filter

#立即关闭
echo 1 > /proc/sys/net/ipv4/ip_forward
echo 0 > /proc/sys/net/ipv4/conf/default/rp_filter
#注释掉默认配置
sed -i 's/\(^net\|kernel\)/#\1/g' /etc/sysctl.conf
#修改配置
sed -i 's/^#\?net.ipv4.ip_forward =.*/net.ipv4.ip_forward = 1/g' /etc/sysctl.conf
sed -i 's/^#\?net.ipv4.conf.default.rp_filter =.*/net.ipv4.conf.default.rp_filter = 0/g' /etc/sysctl.conf
#生效配置
sysctl -p

③.添加静态路由

这个有多种方法

#单个IP走隧道
route -host 5.6.7.8 dev 隧道接口名

#指定网段走隧道
route -net 4.3.2.1/24 dev 隧道接口名

#也可以用这个
ip route add 1.2.4.8/32 via 隧道出口IP dev 隧道接口名

PS.我一直是route add -host 8.8.8.8 dev 隧道接口名 然后mtr 8.8.8.8 这样来测试隧道有没有通的

也可以做成路由表类型的

#添加路由表条目,数字代表优先级,看着办
echo "100 路由表名" >>/etc/iproute2/rt_tables
#为该表添加默认路由
ip route add default via 隧道出口IP dev 隧道接口名 table 路由表名
#指定某个来源的IP走路由表

对端建议添加对应路由以便回源

route add -net 192.168.0.0/29 dev 隧道接口名

④.配置iptables(可选NAT)

这个基本上就是要做全转发才要的,看需求吧

#隧道入口
iptables -t nat -A POSTROUTING -s 192.168.0.1 -j SNAT –to-source 1.2.3.4
iptables -t nat -A PREROUTING -d 1.2.3.4 -j DNAT –to-destination 192.168.0.1

如果还不通(理论上不应该),可以加条这个

iptables -t nat -A POSTROUTING -o 隧道接口名 -j MASQUERADE
暂无评论

发送评论 编辑评论


				
|´・ω・)ノ
ヾ(≧∇≦*)ゝ
(☆ω☆)
(╯‵□′)╯︵┴─┴
 ̄﹃ ̄
(/ω\)
∠( ᐛ 」∠)_
(๑•̀ㅁ•́ฅ)
→_→
୧(๑•̀⌄•́๑)૭
٩(ˊᗜˋ*)و
(ノ°ο°)ノ
(´இ皿இ`)
⌇●﹏●⌇
(ฅ´ω`ฅ)
(╯°A°)╯︵○○○
φ( ̄∇ ̄o)
ヾ(´・ ・`。)ノ"
( ง ᵒ̌皿ᵒ̌)ง⁼³₌₃
(ó﹏ò。)
Σ(っ °Д °;)っ
( ,,´・ω・)ノ"(´っω・`。)
╮(╯▽╰)╭
o(*////▽////*)q
>﹏<
( ๑´•ω•) "(ㆆᴗㆆ)
😂
😀
😅
😊
🙂
🙃
😌
😍
😘
😜
😝
😏
😒
🙄
😳
😡
😔
😫
😱
😭
💩
👻
🙌
🖕
👍
👫
👬
👭
🌚
🌝
🙈
💊
😶
🙏
🍦
🍉
😣
Source: github.com/k4yt3x/flowerhd
颜文字
Emoji
小恐龙
花!
上一篇
下一篇