Linux虚拟网络设备

tun/tap

Linux使用tun模块实现tun/tap,tun工作在L3,tap工作在L2

module_init(tun_init)
	misc_register(&tun_miscdev)
		.fops = &tun_fops

tun_chr_ioctl
	__tun_chr_ioctl
		tun_set_iff
			tun_net_init
				dev->netdev_ops = &tun_netdev_ops
				dev->netdev_ops = &tap_netdev_ops
			tun_attach
			register_netdevice
# 查看和加载tun模块
modinfo tun
lsmod | grep tun
modprobe tun
# 安装tunctl
vi /etc/yum.repos.d/nux-misc.repo
[nux-misc]
name=Nux Misc
baseurl=http://li.nux.ro/download/nux/misc/el7/x86_64/
enabled=0
gpgcheck=1
gpgkey=http://li.nux.ro/download/nux/RPM-GPG-KEY-nux.ro

yum --enablerepo=nux-misc install tunctl -y
# 创建tap
tunctl -t tap1
ip addr add 10.0.0.1/24 dev tap1
ip link set tap1 up

namespace

一个namespace提供了一套独立的网络协议栈

# 创建namespace
ip netns add ns1
# 将tap移入namespace
ip link set tap1 netns ns1
ip netns exec ns1 ip addr add 10.0.0.1/24 dev tap1
ip netns exec ns1 ip link set tap1 up
# 打开namespace的转发
ip netns exec ns1 sysctl -w net.ipv4.ip_forward=1

veth pair

veth pair用于连接两个虚拟网络设备

# 创建veth pair
ip link add tap1 type veth peer name tap2

ip netns add ns1
ip netns add ns2

ip link set tap1 netns ns1
ip link set tap2 netns ns2

ip netns exec ns1 ip addr add 10.0.0.1/24 dev tap1
ip netns exec ns2 ip addr add 10.0.0.2/24 dev tap2

ip netns exec ns1 ip link set tap1 up
ip netns exec ns2 ip link set tap2 up

ip netns exec ns1 ping 10.0.0.2
ip netns exec ns2 ping 10.0.0.1

bridge

bridge相当于一个二层交换机

yum install bridge-utils -y

ip link add tap1 type veth peer name peer1
ip link add tap2 type veth peer name peer2
ip link add tap3 type veth peer name peer3
ip link add tap4 type veth peer name peer4

ip netns add ns1
ip netns add ns2
ip netns add ns3
ip netns add ns4

# 将veth pair的一端加入namespace
ip link set tap1 netns ns1
ip link set tap2 netns ns2
ip link set tap3 netns ns3
ip link set tap4 netns ns4

# 创建bridge
brctl addbr br1

# 将veth pair的另一端加入bridge
brctl addif br1 peer1
brctl addif br1 peer2
brctl addif br1 peer3
brctl addif br1 peer4

ip netns exec ns1 ip addr add 10.0.0.1/24 dev tap1
ip netns exec ns2 ip addr add 10.0.0.2/24 dev tap2
ip netns exec ns3 ip addr add 10.0.0.3/24 dev tap3
ip netns exec ns4 ip addr add 10.0.0.4/24 dev tap4

ip link set br1 up
ip link set peer1 up
ip link set peer2 up
ip link set peer3 up
ip link set peer4 up
ip netns exec ns1 ip link set tap1 up
ip netns exec ns2 ip link set tap2 up
ip netns exec ns3 ip link set tap3 up
ip netns exec ns4 ip link set tap4 up

ip netns exec ns1 ping 10.0.0.2
ip netns exec ns1 ping 10.0.0.3
ip netns exec ns1 ping 10.0.0.4

router

linux本身就是一个路由器

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

ip link add tap1 type veth peer name peer1
ip link add tap2 type veth peer name peer2

ip netns add ns1
ip netns add ns2

ip link set tap1 netns ns1
ip link set tap2 netns ns2

ip addr add 10.0.1.1/24 dev peer1
ip addr add 10.0.2.1/24 dev peer2
ip netns exec ns1 ip addr add 10.0.1.2/24 dev tap1
ip netns exec ns2 ip addr add 10.0.2.2/24 dev tap2

ip link set peer1 up
ip link set peer2 up
ip netns exec ns1 ip link set tap1 up
ip netns exec ns2 ip link set tap2 up

ip netns exec ns1 ip route add 10.0.2.0/24 via 10.0.1.1
ip netns exec ns2 ip route add 10.0.1.0/24 via 10.0.2.1

ip netns exec ns1 ping 10.0.2.2
ip netns exec ns2 ping 10.0.1.2

tun

在router的基础上建立ipip隧道

ip netns exec ns1 ip tunnel add tun1 mode ipip remote 10.0.2.2 local 10.0.1.2
ip netns exec ns2 ip tunnel add tun2 mode ipip remote 10.0.1.2 local 10.0.2.2

ip netns exec ns1 ip addr add 10.0.3.2/24 dev tun1
ip netns exec ns2 ip addr add 10.0.4.2/24 dev tun2

ip netns exec ns1 ip link set tun1 up
ip netns exec ns2 ip link set tun2 up

ip netns exec ns1 ip route add 10.0.4.0/24 dev tun1
ip netns exec ns2 ip route add 10.0.3.0/24 dev tun2

# iptables放行ipip
iptables -I FORWARD -p 4 -j ACCEPT

ip netns exec ns1 ping 10.0.4.2
ip netns exec ns2 ping 10.0.3.2

vxlan

配置vm1

ip link add vxlan1 type vxlan id 1 dstport 4789 group 239.1.1.1 dev ens33
ip addr add 10.0.0.1/24 dev vxlan1
ip link set vxlan1 up

# iptables放行udp 4789
iptables -I INPUT -p udp --dport 4789 -j ACCEPT

配置vm2

ip link add vxlan1 type vxlan id 1 dstport 4789 group 239.1.1.1 dev ens33
ip addr add 10.0.0.2/24 dev vxlan1
ip link set vxlan1 up

# iptables放行udp 4789
iptables -I INPUT -p udp --dport 4789 -j ACCEPT

vm1和vm2互ping

ping 10.0.0.2
ping 10.0.0.1
  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 1
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值