gre隧道是啥我就不解释了, 懂的人自然懂..不懂的谷歌一下吧
我比较偏向用Centos来做服务器, 至于Ubuntu什么的都差不多.
假设有两台Server
Server A:
公网IP: 1.1.1.1
Server B:
公网IP: 2.2.2.2
现在需要在A和B之间建立gre隧道. 方法很简单.
在Server A上编辑
/etc/sysconfig/network-scripts/ifcfg-gre1 DEVICE=gre1 ONBOOT=yes TYPE=GRE BOOTPROTO=none PEER_OUTER_IPADDR=2.2.2.2 PEER_INNER_IPADDR=10.0.0.2 MY_OUTER_IPADDR=1.1.1.1 MY_INNER_IPADDR=10.0.0.1
其中ifcfg-gre1本质上名字是不受限制的
DEVICE则指定这个设备的名字
PEER_OUTER_IPADDR指定了Server B的IP
而PEER_INNER_IPADDR则指定了Server B在这个隧道中的内部IP.
同理MY_也是一样的.
MY_OUTER_IPADDR不写也可以, 不过最好写上, 如果写上无法建立的话, 就去掉吧.
同理在Server B上也编辑
/etc/sysconfig/network-scripts/ifcfg-gre1
DEVICE=gre1 ONBOOT=yes TYPE=GRE BOOTPROTO=none PEER_OUTER_IPADDR=1.1.1.1 PEER_INNER_IPADDR=10.0.0.1 MY_OUTER_IPADDR=2.2.2.2 MY_INNER_IPADDR=10.0.0.2
区别在于PEER_和MY_的对调
在两个Server上都编辑好之后, 在两个Server上都运行
ifup gre1
然后在任意Server上执行
ip addr
来查看一下, 当你看到类似如下内容的时候, 说明已经成功一半了
6: gre2@NONE: <POINTOPOINT,NOARP,UP,LOWER_UP> mtu 1476 qdisc noqueue state UNKNOWN qlen 1 link/gre 1.1.1.1 peer 2.2.2.2 inet 10.0.0.1 peer 10.0.0.2/32 scope global gre2 valid_lft forever preferred_lft forever
此时在Server A上尝试ping Server B的INNER地址
ping 10.0.0.2
同时也可以在Server B上ping 10.0.0.1
能ping通说明gre隧道建立成功了.
如果ping不通首先检查防火墙是否开启, 用firewall-cmd的执行
firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -p gre -j ACCEPT firewall-cmd --reload
或者用iptables的执行
iptables -I INPUT -p gre -j ACCEPT
应用
隧道建立起来了, 但是有啥用呢?
假设这里有一台Server C, 出于种种原因, C只能由B访问, A是访问不到C的, 但是A确实有访问C的需求.
那么在Server B上编辑
/etc/sysctl.conf net.ipv4.ip_forward = 1
然后sysctl -p
之后用firewall-cmd的执行
firewall-cmd --permanent --direct --add-rule ipv4 nat POSTROUTING 0 -o enp0s3 -j MASQUERADE firewall-cmd --reload
用iptables的执行
iptables -t nat -I POSTROUTING -o enp0s3 -j MASQUERADE
其中enp0s3换成自己B服务器公网IP的网卡名称
接下来添加路由表, 让A访问C的数据包由gre隧道出去, 假设C的IP是3.3.3.3
ip route add 3.3.3.3 dev gre1
在A上尝试ping 3.3.3.3成功就可以了.
是··是运维