ip tunnel 隧道技术

  1. 配置两台主机的 lo地址,用来测试用,如果不做gre的话,互相是ping不同对方的回环地址的。
    注意环境是
    主机1的ip:192.168.1.1 lo地址:1.1.1.1
    主机2的ip:192.168.1.2 lo地址: 2.2.2.1
    root@liuhao1:~# ip addr add 1.1.1.1/24 dev lo
    root@liuhao2:~# ip addr add 2.2.2.1/24 dev lo
    
  2. 配置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

上一篇:Arthas 远程调试


下一篇:SqlServer中Datetime类型用Like查找的问题