使用 ip
命令创建虚拟网络接口(如 veth 对),并将它们分配给特定的应用程序或服务是一种常见的技术手段,尤其在容器化环境、网络命名空间管理等领域非常有用。下面详细为您介绍这一过程及相关背景知识。
一、veth 接口简介
veth
(Virtual Ethernet Pair)是一组成对的虚拟网络接口,其中一个端点发送的数据包会被传递到另一个端点。这种机制类似于管道通信,在 Linux 系统中常用于连接两个独立的网络命名空间(Network Namespace)。
典型应用场景包括:
- 容器间通信
- 虚拟路由器配置
- 测试复杂的网络拓扑
二、准备工作
在开始之前,您需要确保以下条件已满足:
- 系统支持 network namespaces 和 veth 设备。
- 具有 root 权限(可通过 sudo 实现)。
- 已安装必要的工具 (
ip
,ping
,ssh
等)。
三、操作步骤
1. 创建一对 veth 接口
运行命令:
sudo ip link add veth0 type veth peer name veth1
上述命令会在当前系统中创建两对接口:veth0
和 veth1
,两者相互连通。
2. 查看新生成的 veth 接口
您可以查看新增加的 veth 接口状态:
ip link show
应该能看到类似如下内容:
5: veth0@if6: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether aa:bb:cc:dd:ee:ff brd ff:ff:ff:ff:ff:ff
6: veth1@if5: <BROADCAST,MULTICAST> mtu 1500 qdisc noop state DOWN mode DEFAULT group default qlen 1000
link/ether ff:ee:dd:cc:bb:aa brd ff:ff:ff:ff:ff:ff
可以看到这两者关联在一起,并且默认处于关闭状态。
3. 分配 IP 地址
为每个 veth 接口分别指定 IP 地址,并启用它:
对于 veth0
:
sudo ip addr add 192.168.5.1/24 dev veth0
sudo ip link set veth0 up
对于 veth1
:
sudo ip addr add 192.168.5.2/24 dev veth1
sudo ip link set veth1 up
此时两条链路均已激活并且可以互相 ping 达对方了!
4. 移动一个 veth 到新的 Network Namespace 中去
首先新建一个 namespace 叫做 ns1
:
sudo ip netns add ns1
接着把刚才建立起来的一个 endpoint (比如说是 veth1
) 放入这个 namespace 当中:
sudo ip link set veth1 netns ns1
切换至刚刚创建的新namespace 下面去做一些基础性的初始化工作,像赋予其IP地址啦之类的:
sudo ip netns exec ns1 bash
# Inside the new shell...
ip addr add 192.168.5.2/24 dev lo && ip link set dev lo up
exit
现在我们已经成功构建了一个隔离出来的小型局域网环境!
5. 验证联通性
从主宿主机尝试 Ping 新建Namespace 内部设备:
ping -c 4 192.168.5.2
同理也可以进入目标namespace 后反过来测试一下能否访问外侧资源.
四、限制流量只允许某程序穿越特定VETH
为了实现让某个特定进程只能经由指定路由走数据流的目的,则需要用到 iptables 或 nftables 规则集来进行源目的匹配过滤; 还有一种更简洁的方式便是借助 cgroup (control groups).
假设我们要限定 curl 请求仅通过刚设立完成的那个隧道:
方式A - 使用 iptables 标记+规则绑定策略:
设定 mark标记值后结合 fwmark 参数引导路由选择.
iptables -t mangle -I OUTPUT ! -o eth0 -p tcp --sport 1024:65535 -j MARK --set-mark 1
ip rule add fwmark 1 table 10
ip route add local 0.0.0.0/0 dev veth0 scope host table 10
方式B - Control Group(CGroup):
创建专门针对本任务所需CGROUP分类单元, 并指派相应PID加入其中即可自动生效分流效果.
以上即完成了整个流程描述! 如果还有疑问欢迎继续提问~
Linux网络隔离配置方法
一、使用虚拟网络接口
创建虚拟网络接口
使用 ip 命令创建虚拟网络接口(如 veth 对),并将其分配给特定应用程序或服务。
bash
Copy Code
sudo ip link add myveth0 type veth peer name myveth1
sudo ip link set myveth0 up
sudo ip link set myveth1 up
这种方法适用于隔离不同应用程序的网络流量。
配置虚拟IP地址
在现有网卡上创建虚拟网卡并分配IP地址,实现网络隔离。
bash
Copy Code
ifconfig eth0:1 192.168.1.2
虚拟IP地址仅存在于客户端网络接口中,不存储在网络设备中,适合增强网络安全性。
二、使用网络命名空间
创建网络命名空间
使用 ip netns 命令创建独立的网络命名空间,隔离网络环境。
bash
Copy Code
sudo ip netns add myns
sudo ip netns exec myns ip addr add 192.168.100.1/24 dev lo
sudo ip netns exec myns ip link set lo up
每个命名空间都有自己的网络设备和配置,适合隔离不同服务的网络流量。
将网络接口分配到命名空间
将物理或虚拟网络接口分配到特定命名空间,实现隔离。
bash
Copy Code
sudo ip link set eth1 netns myns
sudo ip netns exec myns ip addr add 192.168.1.3/24 dev eth1
sudo ip netns exec myns ip link set eth1 up
这种方法适合在复杂环境中实现网络隔离。
三、使用Netplan配置网络隔离
创建Netplan配置文件
在 /etc/netplan/ 目录下创建配置文件,定义网络接口的隔离设置。
yaml
Copy Code
network:
version: 2
ethernets:
eth0:
dhcp4: true
eth1:
addresses: [192.168.1.2/24]
gateway4: 192.168.1.1
使用 sudo netplan apply 应用配置。
结合网络命名空间
将Netplan配置与网络命名空间结合,实现更精细的隔离。
bash
Copy Code
sudo ip netns add ns1
sudo ip link set eth1 netns ns1
sudo ip netns exec ns1 ip addr add 192.168.1.3/24 dev eth1
sudo ip netns exec ns1 ip link set eth1 up
这种方法适合在服务器环境中实现网络隔离。
四、使用iptables进行流量隔离
配置iptables规则
使用 iptables 限制特定IP或端口的访问,实现流量隔离。
bash
Copy Code
iptables -A INPUT -s 192.168.1.100 -j DROP
iptables -A INPUT -p tcp --dport 22 -j ACCEPT
这种方法适合在防火墙层面实现网络隔离。
结合虚拟网络接口
将 iptables 规则应用于虚拟网络接口,增强隔离效果。
bash
Copy Code
iptables -A INPUT -i eth0:1 -j DROP
这种方法适合在复杂网络环境中使用。
五、总结
虚拟网络接口:适合简单隔离场景,如为特定应用程序分配独立接口。
网络命名空间:提供完全隔离的网络环境,适合复杂服务隔离。
Netplan配置:适合在服务器环境中实现网络隔离,结合命名空间效果更佳。
iptables规则:适合在防火墙层面实现流量隔离,增强安全性。
根据实际需求选择合适的方法,可以有效实现Linux网络隔离。
Linux IPsec VPN配置教程
一、IPsec VPN简介
IPsec(Internet Protocol Security)是一种用于保护IP通信的协议套件,通过加密和认证确保数据的安全传输。它支持两种模式:传输模式(保护数据包内容)和隧道模式(保护整个IP数据包)。
二、配置工具与环境
工具
Libreswan:Linux上常用的IPsec实现,支持IKEv1和IKEv2协议。
NetworkManager:提供图形化配置界面,适合桌面环境。
环境要求
确保系统已安装 libreswan 和 NetworkManager-libreswan-gnome 包。
确保防火墙允许IPsec相关端口(如UDP 500和4500)。
三、命令行配置步骤
安装Libreswan
bash
Copy Code
sudo apt-get install libreswan
或
bash
Copy Code
sudo yum install libreswan
配置IPsec连接
编辑 /etc/ipsec.conf 文件,添加以下内容:
bash
Copy Code
conn myvpn
left=192.168.1.100 # 本地IP
leftsubnet=192.168.1.0/24 # 本地子网
right=203.0.113.1 # 远程IP
rightsubnet=10.0.0.0/24 # 远程子网
authby=secret
auto=start
```:ml-citation{ref="3" data="citationList"}。
配置预共享密钥
编辑 /etc/ipsec.secrets 文件,添加以下内容:
bash
Copy Code
192.168.1.100 203.0.113.1 : PSK "your_shared_secret"
```:ml-citation{ref="3" data="citationList"}。
启动IPsec服务
bash
Copy Code
sudo systemctl start ipsec
sudo systemctl enable ipsec
```:ml-citation{ref="2" data="citationList"}。
验证连接
bash
Copy Code
sudo ipsec status
查看连接状态,确保隧道已建立。
四、图形化配置步骤
打开NetworkManager
按 Super 键,搜索并打开 Settings,选择 Network。
添加VPN连接
点击 + 图标,选择 IPsec,填写以下信息:
网关:远程VPN服务器IP。
预共享密钥:与远程服务器一致。
本地子网:本地网络范围。
远程子网:远程网络范围。
保存并启用连接
点击 Apply,然后启用连接,确保状态显示为 Connected。
五、高级配置
加密算法配置
在 /etc/ipsec.conf 中指定加密算法,例如:
bash
Copy Code
ike=aes256-sha2_256-modp2048
esp=aes256-sha2_256
```:ml-citation{ref="3" data="citationList"}。
日志调试
启用详细日志:
bash
Copy Code
sudo ipsec whack --debug-all
查看日志文件 /var/log/secure 或 /var/log/messages。
六、总结
命令行配置:适合服务器环境,灵活性高。
图形化配置:适合桌面环境,操作简单。
高级配置:可根据需求调整加密算法和日志级别。
通过以上步骤,您可以在Linux上快速配置并启用IPsec VPN,确保网络通信的安全性和可靠性。
