本文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
输入前后对比(会添加一个虚拟网卡的):
我们将使用的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
您将看到类似的输出:
如果两端可以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