转载请注明出处:

  Linux的netns(Network Namespace)是Linux内核提供的一项强大的网络隔离功能,它能够创建多个独立的网络空间,每个空间都拥有自己独立的网络协议栈,包括网络接口(网卡)、路由表、iptables规则等。这种隔离机制使得不同的应用程序或服务可以在互不干扰的网络环境中运行,提高了系统的安全性和灵活性。以下是对netns的详细总结和示例说明:

一、netns的基本概念和特点

  • 基本概念:netns是Linux内核提供的一种网络命名空间机制,用于实现网络资源的隔离。
  • 特点:
    • 隔离性:不同的netns之间完全隔离,彼此无法直接访问对方的网络资源。
    • 独立性:每个netns都拥有自己独立的网络协议栈,包括网络接口、路由表、iptables规则等。
    • 灵活性:可以根据需要创建、删除和修改netns,以适应不同的应用场景。

二、netns的使用方式

netns的使用主要通过ip命令的netns子命令来管理。以下是一些常用的ip netns命令:

  • 查看所有netnsip netns list
  • 创建netnsip netns add <name>
  • 删除netnsip netns del <name>
  • netns中执行命令:ip netns exec <name> <command>

三、netns的示例说明

以下是一个使用netns创建和配置网络隔离环境的示例:

  1. 创建两个netns

    ip netns add ns0
    ip netns add ns1
  2. 添加并配置虚拟网卡:
    首先,需要添加两个虚拟网卡(例如,使用tun/tap设备或veth对)并配置IP地址。这里以veth对为例:
    ip link add name veth0 type veth peer name veth1
    ip link set veth0 up
    ip link set veth1 up
    ip addr add 10.0.0.1/24 dev veth0
    ip addr add 10.0.0.2/24 dev veth1
  3. 将虚拟网卡移动到不同的netns
    ip link set veth0 netns ns0
    ip link set veth1 netns ns1
  4. netns中配置网络接口:
    由于将网络接口移动到netns后,其状态会被重置,因此需要在netns中重新配置网络接口:
    ip netns exec ns0 ip link set veth0 up
    ip netns exec ns0 ip addr add 10.0.0.1/24 dev veth0
    ip netns exec ns1 ip link set veth1 up
    ip netns exec ns1 ip addr add 10.0.0.2/24 dev veth1
  5. 测试网络隔离:
    在宿主机器上,尝试ping两个netns中的IP地址,会发现无法ping通(因为网络是隔离的)。然后,在netns内部执行ping命令,测试网络连通性:
    ip netns exec ns0 ping 10.0.0.2  # 无法ping通
    ip netns exec ns1 ping 10.0.0.1 # 无法ping通
    ip netns exec ns0 ping 10.0.0.1 # 在ns0中ping自己,能够ping通

四、netns的应用场景

netns广泛应用于需要网络隔离的场景,如:

  • 容器技术:如Docker就是基于netns实现的网络隔离,每个容器都运行在自己的netns中。
  • 虚拟化技术:在虚拟化环境中,可以使用netns为不同的虚拟机提供独立的网络环境。
  • 网络测试:在开发或测试网络应用时,可以使用netns模拟不同的网络环境。

  总之,netns是Linux中一项非常有用的网络隔离机制,它提供了灵活、安全、高效的网络环境管理能力。

Linux的netns使用总结的更多相关文章

  1. Linux ip netns 命令

    ip netns 命令用来管理 network namespace.它可以创建命名的 network namespace,然后通过名字来引用 network namespace,所以使用起来很方便. ...

  2. OpenVPN多处理之-netns容器与iptables CLUSTER

    假设还是沉湎于之前的战果以及强加的感叹,不要冥想,将其升华. 1.C还是脚本 以前,我用bash组织了复杂的iptables,ip rule等逻辑来配合OpenVPN,将其应用于差点儿全部能够想象得到 ...

  3. Linux Namespace : Network

    Network namespace 在逻辑上是网络堆栈的一个副本,它有自己的路由.防火墙规则和网络设备.默认情况下,子进程继承其父进程的 network namespace.也就是说,如果不显式创建新 ...

  4. Linux 驱动开发

    linux驱动开发总结(一) 基础性总结 1, linux驱动一般分为3大类: * 字符设备 * 块设备 * 网络设备 2, 开发环境构建: * 交叉工具链构建 * NFS和tftp服务器安装 3, ...

  5. 【 Linux 网络虚拟化 】Netns

    netns 可以创建一个完全隔离的新网络环境,这个环境包括一个独立的网卡空间,路由表,ARP表,ip地址表,iptables等.总之,与网络有关的组件都是独立的. 创建网络空间: # ip netns ...

  6. Linux 中 ip netns 命令

    通过 ip netns help 可以查看所有关于ip netns的命令: network namespace 在逻辑上是网络堆栈的一个副本,它有自己的路由.防火墙规则和网络设备. ip netns ...

  7. Linux下使用ip netns命令进行网口的隔离和配置ip地址

    1. 添加隔离标记符: ip netns add fd 2. 将指定网卡放入隔离中: ip link set eth1 netns fd 3. 在隔离环境下执行命令: ip netns exec fd ...

  8. Linux网络属性配置

    目录 IP地址分类 如何将Linux主机接入到网络中 网络接口的命名方式 ifcfg系列命令 如何配置主机名 如何配置DNS服务器指向 iproute2系列命令 Linux管理网络服务 永久生效配置路 ...

  9. 理解 neutron(15):Neutron linux-bridge-agent 创建 linux bridge 的简要过程

    学习 Neutron 系列文章: (1)Neutron 所实现的虚拟化网络 (2)Neutron OpenvSwitch + VLAN 虚拟网络 (3)Neutron OpenvSwitch + GR ...

  10. 理解Docker(3):Docker 使用 Linux namespace 隔离容器的运行环境

    本系列文章将介绍Docker的有关知识: (1)Docker 安装及基本用法 (2)Docker 镜像 (3)Docker 容器的隔离性 - 使用 Linux namespace 隔离容器的运行环境 ...

随机推荐

  1. 增补博客 第三篇 python 英文统计

    编写程序实现对特定英文文章(文本文件)的单词数和有效行数的统计,其中要求空行不计数: def count_words_and_lines(file_path): word_count = 0 line ...

  2. Vue 打包相关

    Vue 打包相关 vue-cli-service build# 用法:vue-cli-service build [options] [entry|pattern] 选项: --mode 指定环境模式 ...

  3. 牛客小白月赛96(待F)

    比赛链接:牛客小白月赛96 赛时感受 赛时在前面卡的时间有点长,C题没开longlong wa了n发,D题没考虑负数又wa了n发,然后来写E的时候时间就不长了,匆忙写一次交一发. A 思路 当其中一个 ...

  4. 一款.NET开源的i茅台自动预约小助手

    前言 今天大姚给大家分享一款.NET开源.基于WPF实现的i茅台APP接口自动化每日自动预约(抢茅台)小助手:HyggeImaotai. 项目介绍 该项目通过接口自动化模拟i茅台APP实现每日自动预约 ...

  5. Ethercat设备数据 转 EthernetIP项目案例

    1         案例说明 1.   设置网关采集EtherCAT设备数据 2.   把采集的数据转成EthernetIP协议转发给其他系统. 2        VFBOX网关工作原理 VFBOX网 ...

  6. 将PaddleOCR 转为 ONNX 运行

    PaddleOCR 是目前最好的开源OCR框架, 但paddle框架的兼容性实在不怎么好, 部署的时候容易出现各种各样的问题. 如果能把PaddleOCR转成ONNX, 就可以跳过paddle框架坑的 ...

  7. fseek在 fopen 带有'a'模式下不起作用

    关于 fseek 在 追加写模式的注意事项 结论:fseek在 fopen 带有'a'模式的文件指针偏移不起作用. int main(int argc, char *argv[]) { FILE * ...

  8. UART和RS232、RS485的关系是什么?

    串口通讯是电子工程师和嵌入式开发工程师面对的最基本问题,RS232则是其中最简单最常用的通讯方式.但是初学者往往搞不清有关的名词如UART和RS232或RS485之间是什么关系,因为它们经常被放到语句 ...

  9. spring-关于组件的注入及获取流程

    一.组件注入的基本流程: 容器初始化: Spring应用启动时,会读取配置(如XML配置.注解配置等),并根据这些配置创建Bean定义(BeanDefinition). 根据Bean定义,Spring ...

  10. OpenFileDialog的使用实例

    'Dim excelFolderPath As String = "" 'Dim openFileDialog1 As New OpenFileDialog() 'openFile ...