首页 > 系统相关 >Linux的netns使用总结

Linux的netns使用总结

时间:2024-08-06 14:21:18浏览次数:18  
标签:总结 隔离 exec ip ping add Linux netns

 转载请注明出处:

  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中一项非常有用的网络隔离机制,它提供了灵活、安全、高效的网络环境管理能力。

 

标签:总结,隔离,exec,ip,ping,add,Linux,netns
From: https://www.cnblogs.com/zjdxr-up/p/18341133

相关文章

  • Ubuntu 24.04 LTS Linux上安装Azure Data Studio
    AzureDataStudio是由Microsoft开发的开源数据库管理和开发工具。它是一种跨平台数据库管理工具,可在所有流行的操作系统(Windows、macOS和Linux)上运行。该软件提供了一个现代编辑器和丰富的界面,用于管理各种数据库系统,例如MicrosoftSQLServer、PostgreSQL等。它还为......
  • 在Linux命令行中检查固件版本的7种方法
    当前有几种方法可以检查Linux上的固件或BIOS版本,这有助于解决硬件问题,对于保持系统安全和最新至关重要。在本文中,我们将了解获取系统固件版本的工具和命令,这些固件版本与BIOS、UEFI或设备特定的固件有关。每种方法都提供了一种简单的方法,可帮助您快速确定当前固件版本并......
  • 【Linux】常用命令——vim
    菜鸟教程学习笔记Linuxvi/vim|菜鸟教程(runoob.com)Vim是从vi发展出来的一个文本编辑器。代码补全、编译及错误跳转等方便编程的功能特别丰富,在程序员中被广泛使用。是一个程序开发工具而不是文字处理软件。1.vi/vim的使用基本上vi/vim共分为三种模式,命令模式(Co......
  • linux 扩容
    工具fdisk只支持MBR分区模式parted同时支持MBR和GPT分区扩容在线扩容partedroot@kzf:~#lsblkNAMEMAJ:MINRMSIZEROTYPEMOUNTPOINTSsda8:00446.6G0disk├─sda18:101G0part/boot/efi└─sda28:2092.1G0part/parted/dev/sdaresizep......
  • 简单的mysqldump备份(linux)
    备份小数据库用mysql自带的mysqldump就可以完成备份,写一个简单的适用于linux下跑的脚本。策略每天凌晨1点全备,保留7天备份脚本dbbak.sh#!/bin/bashexportPATH=/usr/local/sbin:/usr/local/bin:/sbin:/bin:/usr/sbin:/usr/bin:/usr/local/mysql/bin:/root/bin:/usr/local/......
  • JVM知识总结(性能调优)
    文章收录在网站:http://hardyfish.top/文章收录在网站:http://hardyfish.top/文章收录在网站:http://hardyfish.top/文章收录在网站:http://hardyfish.top/性能调优何时进行JVM调优?遇到以下情况,就需要考虑进行JVM调优了:Heap内存(老年代)持续上涨达到设置的最大内存值Full......
  • linux进程篇总结——实战——自定义shell
        前言:经过过去两章十二篇文章的学习,我们已经知道了进程的基本概念以及进程的控制方法。本篇内容就是使用过去学习的内容自己写一个功能简单的shell外壳程序,也就是我们使用的bash命令行。本篇内容是过去进程知识的集大成者。我们在这个实战程序中,将过去学过的......
  • Linux Docker使用代理
    面对dockerpull下载速度过慢,甚至根本无法正常下载的问题,下面介绍三种方法解决Docker联网的问题。内容转载自:https://note.qidong.name/2020/05/docker-proxy/有所修改通常的在终端中设置http_proxy的环境变量不能代理dockerpull的流量,原因在于docker的流量是systemd管理的,......
  • ubuntu22.04桌面版安装linux搜狗输入法
    本文参考搜狗输入法官方教程,并针对ubuntu22.04做了一些调整https://pinyin.sogou.com/linux/help.php1.安装fcitx#查看fcitx版本aptinfofcitx|grepVersionWARNING:aptdoesnothaveastableCLIinterface.Usewithcautioninscripts.Version:1:4.2.9.8-5#......
  • laravel:得到linux平台当前脚本的执行用户
    一,代码:<?phpnamespaceApp\Console\Commands;useIlluminate\Console\Command;classIndexAllCommandextendsCommand{/***Thenameandsignatureoftheconsolecommand.**@varstring*/protected$signature='......