网站如何做电脑和手机,做网站原价商品打个横线,关于地产设计网站,网站维护预算关键词#xff1a;veth、vlan、bridge、iptables、nat、tcpdump、icmp、cidr、arp、路由表、计算机网络协议栈 前言
在过去的几十年里#xff0c;互联网发展得非常快。许多新兴技术迅速崛起#xff0c;也有不少曾经的主流技术被淘汰。然而#xff0c;有些技术因为其基础性… 关键词veth、vlan、bridge、iptables、nat、tcpdump、icmp、cidr、arp、路由表、计算机网络协议栈 前言
在过去的几十年里互联网发展得非常快。许多新兴技术迅速崛起也有不少曾经的主流技术被淘汰。然而有些技术因为其基础性和核心地位一直在不断进步中保持着重要作用。 计算机网络就是其中之一。虽然网络架构和传输协议在不断更新但其核心概念和原理一直都在发挥着关键作用支撑着全球的信息交换。在这些技术中网卡作为计算机连接网络的桥梁起到了至关重要的作用。
网卡是什么
网卡属于计算机硬件的一部分是实现计算机数据传输的关键部件最常见的有无线网卡和有线网卡通常是直接或间接集成在计算机主板中, 它可以将计算机产生的数据发送到另一个网络也可以将另一个网络的数据传递给我们的主机。
什么是虚拟网卡
虚拟网卡是一种软件实现的网络接口模拟了物理网卡的功能使操作系统和应用程序可以通过它发送和接收网络流量。虚拟网卡在虚拟化、容器化的网络环境中发挥着重要的作用。
VETH——创建虚拟网卡及多个内部网络
环境腾讯云轻量级应用服务器、CentOS 7操作系统
结构图
Shell
# 创建三个网络命名空间用于隔离内部网络(查看命名空间ip netns)ip netns add n1ip netns add n2ip netns add n3
# 创建三对虚拟网卡(查看网卡ip link)ip link add veth0 type veth peer name veth1ip link add veth2 type veth peer name veth3ip link add veth4 type veth peer name veth5
# 为veth0、veth2、veth4分配ip地址ip addr add 192.168.0.1/24 dev veth0ip addr add 192.168.100.1/16 dev veth2ip addr add 192.167.0.1/16 dev veth4
# 将veth1、veth3、veth5分别移动到网络命名空间n1、n2、n3中ip link set veth1 netns n1ip link set veth3 netns n2ip link set veth5 netns n3
# 为veth1、veth3、veth5分配ip地址(ip netns exec前缀用来指定具体的网络命名空间)ip netns exec n1 ip addr add 192.168.0.2/24 dev veth1ip netns exec n2 ip addr add 192.168.100.2/16 dev veth3ip netns exec n3 ip addr add 192.167.0.2/16 dev veth5
# 启动网卡ip link set veth0 upip netns exec n1 ip link set veth1 upip link set veth2 upip netns exec n2 ip link set veth3 upip link set veth4 upip netns exec n3 ip link set veth5 up# 网络连通测试(仅用veth0、veth1示例,其他两对同理) ping -I veth0 192.168.0.2ip netns exec n1 ping 192.168.0.1小结
网络命名空间(netns)用来隔离三个虚拟以太网成对出现的虚拟网卡(veth)在这里起到了类似于物理网线的作用。
VLAN——使用虚拟网桥连接多个局域网
结构图 shell
# 创建虚拟网桥ip link add br-mybridge type bridge
# 将 veth0、veth2、veth4桥接到网桥中ip link set veth0 master br-mybridgeip link set veth2 master br-mybridgeip link set veth4 master br-mybridge
# 启动网桥ip link set br-mybridge up
# 修改主机路由表(删除旧路由添加新路由)ip route del 192.168.0.0/24 dev veth0ip route del 192.168.0.0/16 dev veth2ip route del 192.167.0.0/16 dev veth4ip route add 192.168.0.0/16 dev br-mybridgeip route add 192.167.0.0/16 dev br-mybridge
# 添加命名空间内部的路由ip netns exec n1 ip route del 192.168.0.0/24 dev veth1ip netns exec n1 ip route add 192.168.0.0/16 dev veth1ip netns exec n1 ip route add 192.167.0.0/16 dev veth1ip netns exec n2 ip route add 192.167.0.0/16 dev veth3ip netns exec n3 ip route add 192.168.0.0/16 dev veth5
# 删除veth0、veth2、veth4的ip地址ip addr del 192.168.0.1/24 dev veth0ip addr del 192.168.100.1/16 dev veth2ip addr del 192.167.0.1/16 dev veth4
# 网络连通测试(仅用n1网络作为示例其他两个网络同理) ip netns exec n1 ping 192.168.100.2ip netns exec n1 ping 192.167.0.2小结
虚拟网桥类似于物理交换机的作用通过将多个虚拟网卡串联在一起实现内部通信功能。
深入思考为什么网桥不需要设置ip地址 因为网桥和物理交换机一样是工作在数据链路层基于mac地址转发帧(frame)的一种设备。如果该设备仅用来做转发功能那么ip地址对其来说是可选的。 深入思考为什么桥接后不修改路由表时内部网络无法ping通原主机 猜测设置了桥接模式后veth0/veth2/veth4的作用就仅仅是转发数据链路层的帧(frame)。此时ping命令产生的arp请求会转发给网桥br-mybridge进行处理或许是网桥进行arp广播的时候veth0/veth2/veth4没有处理arp请求所以导致无法通信。 NAT——使用iptables打通vlan和互联网
结构图 shell
# 打开内核的ip转发功能将net.ipv4.ip_forward0 变更为 net.ipv4.ip_forward1vim /etc/sysctl.conf
# 检查ip转发功能是否开启sysctl -p
# 设置网关ip地址ip addr add 192.168.0.1/16 dev br-mybridge
# 设置子网的网关地址ip netns exec n1 ip route add default via 192.168.0.1 dev veth1ip netns exec n2 ip route add default via 192.168.0.1 dev veth3ip netns exec n3 ip route add default via 192.168.0.1 dev veth4
# (可选)关闭firewalld防火墙因为firewalld防火墙是基于iptables的,所以会有很多规则可能会影响测试结果。生产环境切勿贸然尝试systemctl stop firewalld
# 添加br-mybridge与eth0的转发规则iptables -A FORWARD -i br-mybridge -o eth0 -j ACCEPTiptables -A FORWARD -i eth0 -o br-mybridge -j ACCEPT
# 添加nat规则iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 互联网连通测试(仅用n1网络作为示例其他两个网络同理) ip netns exec n1 curl baidu.comip netns exec n1 ping 192.167.0.2小结
通过iptables实现了虚拟网桥的路由功能此时这里的虚拟网桥(br-mybridge)已经不仅仅只是做数据帧转发工作同时还将基于ip协议转发网络层的数据包。所以这里br-mybridge的作用更相近于路由器。
总结
本文通过veth讲解了虚拟局域网的通信方式并通过虚拟网桥、iptables、nat等技术模拟了生活中比较常见的一些网络结构。