linux创建仅主机,桥接,nat网卡

linux创建仅主机,桥接,nat网卡

一、创建仅主机网卡

1、创建一个网桥连接名和设备名均为onlylocal

1
nmcli con add type bridge con-name onlylocal ifname onlylocal

2、给网桥设置一个IP(用于和连接网桥的虚拟机通信,如果不需要通信可以不设置)

1
nmcli con mod onlylocal ipv4.addresses 192.168.0.100/24 ipv4.method manual

仅主机网卡的工作就相当于一个二层交换机,只进行局域网之间的通信

二、创建桥接网卡

1、创建一个网桥连接名和设备名均为br0

1
nmcli con add type bridge con-name br0 ifname br0

2、设置设备名为eth0的网卡为br0的从网卡

1
nmcli con add type bridge-slave ifname eth0 master br0

使用这个命令后,br0网卡会变为主网卡,导致无法上网,因为现在上网使用的是br0网卡,需要给br0分配一个ip地址用于上网

3、给br0网卡分配ip地址,根据自己的网络分配即可

手动分配

1
nmcli con mod br0 ipv4.addresses 192.168.0.100/24 ipv4.method manual

使用dhcp分配

1
nmcli con mod br0 ipv4.method auto

桥接网卡通过从网卡实时的接入到网络中,当虚拟机和外部通信的时候会直接将数据包从从网卡中发送出去(通过mac地址表实现)

三、创建nat网卡

1、创建一个网桥连接名和设备名均为nat0

1
nmcli con add type bridge con-name nat0 ifname nat0

2、开启数据包转发

1
vim /etc/sysctl.conf

添加

1
net.ipv4.ip_forward = 1

生效配置

1
sysctl -p

允许将nat0上发往外网的数据包转发给eth0

3、添加iptables规则

添加规则,用于将从eth0发出的数据包中的源地址修改为eth0网卡的地址(源地址伪装)

1
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

-t nat:选择 nat 表。NAT 表用于处理地址转换。
-A POSTROUTING:将规则追加到 POSTROUTING 链。这个链在数据包即将离开主机时处理数据包。
-o eth0:适用于从 eth0 接口发出的数据包。
-j MASQUERADE:执行源地址伪装。这意味着所有通过 eth0 离开主机的数据包都会被更改,使其源地址看起来像是来自主机的 eth0 接口。

添加规则,允许nat0预期发送给eth0的数据包通过

1
iptables -A FORWARD -i nat0 -o eth0 -j ACCEPT

-A FORWARD:将规则追加到 FORWARD 链。这个链用于处理通过主机转发的数据包。
-i nat0:适用于从 nat0 接口进入的数据包。
-o eth0:指定这些数据包的目的地是 eth0 接口。
-j ACCEPT:接受(允许)这些数据包通过。

添加规则,允许eth0预期发送给nat0的数据包(状态为RELATED或ESTABLISHED)通过

1
iptables -A FORWARD -i eth0 -o nat0 -m state --state RELATED,ESTABLISHED -j ACCEPT

-i eth0:适用于从 eth0 接口进入的数据包。
-o nat0:指定这些数据包的目的地是 nat0 接口。
-m state:使用 state 模块匹配数据包的连接状态。
–state RELATED,ESTABLISHED:只接受那些处于“RELATED”(相关的,例如FTP数据连接)或“ESTABLISHED”(已建立的连接)状态的数据包。
-j ACCEPT:接受这些数据包通过。