ipip隧道及其实现

IP隧道技术:

是路由器把一种网络层协议封装到另一个协议中以跨过网络传送到另一个路由器的处理过程。

 

IP 隧道(IP tunneling)是将一个IP报文封装在另一个IP报文的技术,这可以使得目标为一个IP地址的数据报文能被封装和转发到另一个IP地址。IP隧道技术亦称为IP封装技术(IP encapsulation)。IP隧道主要用于移动主机和虚拟私有网络(Virtual Private Network),在其中隧道都是静态建立的,隧道一端有一个IP地址,另一端也有唯一的IP地址。移动IPv4主要有三种隧道技术,它们分别是:IP in IP、最小封装以及通用路由封装。

 

Linux系统内核实现的IP隧道技术主要有三种(PPP、PPTP和L2TP等协议或软件不是基于内核模块的):

ipip、gre、sit 。这三种隧道技术都需要内核模块 tunnel4.ko 的支持

 

ipip  :需要内核模块 ipip.ko ,该方式最为简单!但是你不能通过IP-in-IP隧道转发广播或者IPv6数据包。你只是连接了两个一般情况下无法直接通讯的IPv4网络而已

 

GRE  :需要内核模块 ip_gre.ko ,GRE是最初由CISCO开发出来的隧道协议,能够做一些IP-in-IP隧道做不到的事情。比如,你可以使用GRE隧道传输多播数据包和IPv6数据包。

sit  : 其作用是连接 ipv4 与 ipv6 的网络

 

sit模块所在位置:   /lib/modules/内核版本号/kernel/net/ipv6/sit.ko.xz

ipip模块所在位置:  /lib/modules/内核版本号/kernel/net/ipv4/ipip.ko.xz

gre模块所在位置:  /lib/modules/内核版本号/kernel/net/ipv4/gre.ko.xz

 

查看模块信息命令: modinfo   模块名称

如: modinfo  sit  

     modinfo ip_gre

     modinfo  ipip

 

ip  tunnel 配置:

   

这里使用ipip、sit ,只需要把modprobe后面的模块换掉,把ip tunnel 命令中mode后面的字符替换掉即可

 

ipv4网络中的配置:

a主机配置如下:

  modprobe  ipip

  modprobe  ip_gre

  ip tunnel add tun0 mode gre remote 192.168.122.90 local 192.168.122.80 ttl 64

  ip link set tun0 up

  ip addr add 192.168.1.80 peer 192.168.2.90 dev tun0

  ip route add 192.168.2.0/24 dev tun0

  iptables -F

 

b主机配置如下:

modprobe ipip  

modprobe ip_gre  

ip tunnel add tun0 mode gre remote 192.168.122.80 local 192.168.122.90 ttl 64  

ip link set tun0 up  

ip addr add 192.168.2.90 peer 192.168.1.80 dev tun0  

ip route add 192.168.1.0/24 dev tun0  

iptables -F

 

iptables  -F 也可以换成:

  iptables -I INPUT -p gre -j ACCEPT 或CentOS7下执行

  firewall-cmd --permanent --direct --add-rule ipv4 filter INPUT 0 -i eth0 -p gre -j ACCEPT

 

假如这边还有台主机C,C主机只有一块网卡,其IP为192.168.1.100,和a主机同在eth1网段,可以将a主机配置为一个简单的种由器,其可以访问b主机的IP 192.168.2.90 。只需要在a主机中做如下配置即可。

echo 1 > /proc/sys/net/ipv4/ip_forward

iptables -t nat -I POSTROUTING -o eth0 -j MASQUERADE

注意:该场景下,需要将C主机的网关指向a主机 。

 

2、ipv6网络中的配置

两台主机的信息如下:

a. PC1 eth0:2001::1/64; eth1:192.168.1.1/24;

b. PC2 eth0:2001::2/64; eth1:192.168.2.1/24;

配置如下:

a主机配置

modprobe ip6_tunnel

ip -6 tunnel add tun0 mode ipip6 remote 2001::2 local 2001::1 ttl 64

ip link set tun0 up

ip addr add 192.168.1.1 peer 192.168.2.1 dev tun0

ip route add 192.168.2.0/24 dev tun0

iptables -F

 

b主机配置

modprobe ip6_tunnel

ip -6 tunnel add tun0 mode ipip6 remote 2001::1 local 2001::2 ttl 64

ip link set tun0 up

ip addr add 192.168.2.1 peer 192.168.1.1 dev tun0

ip route add 192.168.1.0/24 dev tun0

iptables -F

 

 

参考地址: http://www.361way.com/linux-tunnel/5199.html

 

 

 

 

 

 

 

 

### Open vSwitch (OVS) 配置 IP-in-IP 隧道 在 Open vSwitch (OVS) 中配置 IP-in-IP 隧道是一种常见的需求,用于在网络间传输流量而不依赖于底层网络协议。以下是关于如何在 OVS 上创建和管理 IP-in-IP 隧道的详细说明。 #### 创建 IP-in-IP 隧道的基本流程 1. **初始化网桥** 使用 `ovs-vsctl` 命令创建一个新的网桥实例,并将其命名为 `br-ipip`。 ```bash ovs-vsctl add-br br-ipip ``` 2. **添加隧道端口** 添加一个基于 IP-in-IP 的隧道端口到指定的远程地址。假设本地 IP 地址为 `192.168.1.10`,远端 IP 地址为 `192.168.1.20`。 ```bash ovs-vsctl add-port br-ipip ipiptunnel \ -- set interface ipiptunnel type=ipinip options:remote_ip=192.168.1.20 options:local_ip=192.168.1.10 ``` 3. **验证配置** 可以通过以下命令查看当前 OVS 网桥及其关联的接口状态。 ```bash ovs-vsctl show ``` 输出应显示新创建的 `ipiptunnel` 接口以及其属性[^4]。 4. **设置流表规则** 定义匹配条件并引导流量进入正确的隧道路径。例如,将来自特定子网(如 `10.0.0.0/24`)的流量封装并通过该隧道发送出去。 ```bash ovs-ofctl add-flow br-ipip "priority=10,ip,nw_src=10.0.0.0/24 actions=output:ipiptunnel" ``` 5. **测试连通性** 在两端设备上执行 ping 测试或其他通信手段来确认隧道功能正常工作。 #### 示例代码展示完整的操作过程 下面是一个综合性的脚本样例,演示上述各步骤的实际应用: ```bash #!/bin/bash # Step 1: Create the bridge 'br-ipip' ovs-vsctl add-br br-ipip # Step 2: Add an IP-in-IP tunnel port with specific IPs LOCAL_IP="192.168.1.10" REMOTE_IP="192.168.1.20" ovs-vsctl add-port br-ipip ipiptunnel \ -- set Interface ipiptunnel type=ipinip options:remote_ip=$REMOTE_IP options:local_ip=$LOCAL_IP # Step 3: Verify configuration details of bridges and ports echo "Current OVS Configuration:" ovs-vsctl show # Step 4: Set up flow rules to direct traffic into the tunnel SUBNET="10.0.0.0/24" TUNNEL_PORT=$(ovs-vsctl get Port ipiptunnel name) ovs-ofctl del-flows br-ipip ovs-ofctl add-flow br-ipip "priority=1,in_port=$TUNNEL_PORT,actions=NORMAL" ovs-ofctl add-flow br-ipip "priority=10,ip,nw_dst=$SUBNET,action=output:$TUNNEL_PORT" # Output confirmation message echo "IP-in-IP Tunnel configured successfully between $LOCAL_IP and $REMOTE_IP." ``` 此脚本实现了自动化部署 IP-in-IP 隧道的功能,简化了手动输入每条指令的过程。 --- #### 注意事项 - 如果遇到任何错误提示,请检查是否存在权限不足或者参数拼写失误等问题。 - 对于大规模生产环境中使用前需充分评估性能影响及安全性考量[^2]。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值