- 配置两台主机的 lo地址,用来测试用,如果不做gre的话,互相是ping不同对方的回环地址的。
注意环境是
主机1的ip:192.168.1.1 lo地址:1.1.1.1
主机2的ip:192.168.1.2 lo地址: 2.2.2.1root@liuhao1:~# ip addr add 1.1.1.1/24 dev lo root@liuhao2:~# ip addr add 2.2.2.1/24 dev lo
- 配置gre
# 开启两个主机的 ip_forward ,可以写在sysctl.conf 开机生效 root@liuhao1:~# echo 1 > /proc/sys/net/ipv4/ip_forward root@liuhao2:~# echo 1 > /proc/sys/net/ipv4/ip_forward # 加载gre模块 root@liuhao1:~# modprobe ip_gre root@liuhao2:~# modprobe ip_gre # 创建隧道 root@liuhao1:~# ip tunnel add gre2 mode gre remote 192.168.1.2 local 192.168.1.1 ttl 255 root@liuhao2:~# ip tunnel add gre2 mode gre remote 192.168.1.1 local 192.168.1.2 ttl 255 # 开启隧道这个虚拟网卡 root@liuhao1:~# ip link set gre2 up root@liuhao2:~# ip link set gre2 up # 添加隧道的接口地址 root@liuhao1:~# ip addr add 10.10.10.1 peer 10.10.10.2 dev gre2 root@liuhao2:~# ip addr add 10.10.10.2 peer 10.10.10.1 dev gre2 # 设置隧道mtu值 root@liuhao2:~# ifconfig gre2 mtu 1500 root@liuhao2:~# ifconfig gre2 mtu 1500 # 添加到对方的路由 root@liuhao1:~# ip route add 2.2.2.0/24 via 192.168.1.2 root@liuhao2:~# ip route add 1.1.1.0/24 via 192.168.1.1
3 .通过ping来测试连通
=================================================
. 创建步骤
环境如下:centos7.9
host A : 121.207.22.123
host B: 111.2.33.28
在host A上面:
# ip tunnel add gre1 mode gre remote 111.2.33.28 local 121.207.22.123 ttl 255
# ip link set gre1 up
# ip addr add 10.10.10.1 peer 10.10.10.2 dev gre1
# ip tunnel add gre1 mode gre remote 111.2.33.28 local 121.207.22.123 ttl 255
# ip link set gre1 up
# ip addr add 10.10.10.1 peer 10.10.10.2 dev gre1
创建一个GRE类型隧道设备gre0, 并设置对端IP为111.2.33.28。隧道数据包将被从121.207.22.123也就是本地IP地址发起,其TTL字段被设置为255。隧道设备分配的IP地址为10.10.10.1,掩码为255.255.255.0。
在host B上面:
# ip tunnel add gre1 mode gre remote 121.207.22.123 local 111.2.33.28 ttl 255
# ip link set gre1 up
# ip addr add 10.10.10.2 peer 10.10.10.1 dev gre1
# ip tunnel add gre1 mode gre remote 121.207.22.123 local 111.2.33.28 ttl 255
# ip link set gre1 up
# ip addr add 10.10.10.2 peer 10.10.10.1 dev gre1
此时,host A 和 host B 建立起GRE隧道了。
4. 检测连通性
# ping 10.10.10.2 (host A)
PING 10.10.10.2 (10.10.10.2) 56(84) bytes of data.
64 bytes from 10.10.10.2: icmp_req=1 ttl=64 time=0.319 ms
64 bytes from 10.10.10.2: icmp_req=2 ttl=64 time=0.296 ms
64 bytes from 10.10.10.2: icmp_req=3 ttl=64 time=0.287 ms
# ping 10.10.10.2 (host A)
PING 10.10.10.2 (10.10.10.2) 56(84) bytes of data.
64 bytes from 10.10.10.2: icmp_req=1 ttl=64 time=0.319 ms
64 bytes from 10.10.10.2: icmp_req=2 ttl=64 time=0.296 ms
64 bytes from 10.10.10.2: icmp_req=3 ttl=64 time=0.287 ms
==============================
iptunnel三种工作模式:
IPIP 模式用于2台Linux 建立隧道,配置非常简单方便。
GRE 模式配置和ipip基本一致,修改模式为gre即可。
SIT 模式用于封装ipv6数据包
host A:
外网IP: 10.10.10.10 内网网卡:1.1.1.1
host B:
外网IP: 20.20.20.20 内网网卡:2.2.2.2
hostA配置:
/sbin/modprobe ipip(名称)
/sbin/iptunnel add a2b mode ipip local 10.10.10.10 remote 20.20.20.20 ttl 64
/sbin/ifconfig tun0 1.1.1.1 pointopoint 2.2.2.2 netmask 255.255.255.255
hostB配置:
/sbin/modprobe ipip
/sbin/iptunnel add a2b mode ipip local 20.20.20.20 remote 10.10.10.10 ttl 64
/sbin/ifconfig tun0 2.2.2.2 pointopoint 1.1.1.1 netmask 255.255.255.255 或ip addr add 10.10.10.1 peer 10.10.10.2 dev gre1
配置完毕通过虚拟网卡来测试一下。分别在A B两台主机上ping 1.1.1.1 & 2.2.2.2 看网络是否通信。
注意主机防火墙配置。
iptables -I INPUT -s 192.168.0.1 -p 47 -j ACCEPT
命令解释
ip tun add a2b mode ipip remote 58.23.0.2 local 211.154.0.2
ip tun add 建立隧道
a2b 省略了name,意思是建立隧道的名称位a2b (设备,类似eth0)
mode ipip 采用的模式为ipip模式
remote 20.20.20.20 远端设备的ip地址
local 10.10.10.10 本机的ip地址
======================
|
1.1.1.1 2.2.2.2 |
+---------+ Public +---------+ | Private
| ServerA +-----------+ ServerB +-----+
+---------+ Network +---------+ | Network
|
| 192.168.1.0/24
实现
通过ip tunnel建立ipip隧道,再通过iptables进行nat,便可以实现。
Step 1. 建立ip隧道
ServerA配置iptunnel,并给tunnel接口配置上ip
#ip tunnel add a2b mode ipip remote 2.2.2.2 local 1.1.1.1
#ifconfig a2b 192.168.2.1 netmask 255.255.255.0
ServerB配置iptunnel,并给tunnel接口配置上ip
#ip tunnel add a2b mode ipip remote 1.1.1.1 local 2.2.2.2
#ifconfig a2b 192.168.2.2 netmask 255.255.255.0
隧道配置完成后,请在ServerA上192.168.2.2,看是否可以ping通,ping通则继续,ping不通需要再看一下上面的命令执行是否有报错
Step 2. 添加路由和nat
ServerA上,添加到192.168.1.0/24的路由
#/sbin/route add -net 192.168.1.0/24 gw 192.168.2.2
ServerB上,添加iptables nat,将ServerA过了访问192.168.1.0/24段的包进行NAT,并开启ip foward功能
iptables -t nat -A POSTROUTING -s 192.168.2.1 -d 192.168.1.0/24 -j MASQUERADE
sysctl -w net.ipv4.ip_forward=1
sed -i '/net.ipv4.ip_forward/ s/0/1/' /etc/sysctl.conf
https://www.cnblogs.com/itfat/p/12563818.html
https://blog.csdn.net/liuhaoy/article/details/106054381