1. 网络拓扑图
- 双网卡单Lan口拓扑图
- 多网卡多Lan口带网桥拓扑图
2. 查看网卡信息
ip a
得出如下网卡信息列表,共四个网络信息,忽略第一个本地环回地址
一共存在三个网卡分别为enp1s0、enp2s0、wlo,以及其他详细信息,当前我们只需要关心网卡名称即可
注意,您的设备中网卡名称不一定和我的一样,请自行区分
1: lo: <LOOPBACK,UP,LOWER_UP> mtu 65536 qdisc noqueue state UNKNOWN group default qlen 1000link/loopback 00:00:00:00:00:00 brd 00:00:00:00:00:00inet 127.0.0.1/8 scope host lovalid_lft forever preferred_lft foreverinet6 ::1/128 scope host valid_lft forever preferred_lft forever
2: enp1s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq state UP group default qlen 1000link/ether 00:f1:f5:2e:66:17 brd ff:ff:ff:ff:ff:ffinet 192.168.1.5/24 brd 192.168.1.255 scope global dynamic enp1s0valid_lft 80851sec preferred_lft 80851secinet6 240e:36a:146b:df00:2f1:f5ff:fe2e:6617/64 scope global dynamic mngtmpaddr noprefixroute valid_lft 258991sec preferred_lft 172591secinet6 fe80::2f1:f5ff:fe2e:6617/64 scope link valid_lft forever preferred_lft forever
3: enp2s0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc mq master br0 state UP group default qlen 1000link/ether 00:f1:f5:2e:66:18 brd ff:ff:ff:ff:ff:ff
4: wlo1: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue master br0 state UP group default qlen 1000link/ether c8:09:a8:12:b8:e4 brd ff:ff:ff:ff:ff:ffaltname wlp0s20f3
5: br0: <BROADCAST,MULTICAST,UP,LOWER_UP> mtu 1500 qdisc noqueue state UP group default qlen 1000link/ether 00:f1:f5:2e:66:18 brd ff:ff:ff:ff:ff:ffinet 192.168.2.1/24 brd 192.168.2.255 scope global br0valid_lft forever preferred_lft foreverinet6 fe80::2045:e5ff:fe6a:440/64 scope link valid_lft forever preferred_lft forever
3. netplan网卡设置
然后我们做以下自定义规定(读者可自行设计)
- enp1s0:有线网卡1,我们规定这个网口为Wan口,用于连接互联网
- enp2s0:有线网卡2,我们规定这个网口为Lan口,供内部网络的有线设备连接
- wlo1: 无线网卡1,我们规定这个网口为Lan口,供内部网络的无线设备连接
- 其他网卡:…
sudo vim /etc/netplan/00-installer-config.yaml
若仅规定了单个Lan口网卡,修改内容如下
network:ethernets:enp1s0:dhcp4: true # 设置dhcp,用以从上级路由器获取ip地址dhcp6: false # 暂不关心optional: true # 设置非阻塞方式配置网络, 否则没有网络时开机会卡很久enp2s0:dhcp4: falsedhcp6: falseaddresses: [192.168.2.1/24] # 设置静态ip,读者可自行确定网段和ipoptional: true
若规定了多个Lan口网卡,修改内容如下
创建一个网桥br0来连接多个Lan口网卡,便于后续DHCP统一管理ip地址
network:ethernets:enp1s0:dhcp4: true # 设置dhcp,用以从上级路由器获取ip地址dhcp6: false # 暂不关心optional: true # 设置非阻塞方式配置网络, 否则没有网络时开机会卡很久enp2s0:dhcp4: falsedhcp6: falseoptional: truewlo1:dhcp4: falsedhcp6: falseoptional: truebridges:br0:interfaces: [enp2s0, wlo1] # 将有线网口enp2s0和wlo1添加到网桥br0下dhcp4: falsedhcp6: falseaddresses: [192.168.2.1/24] # 设置静态ip,读者可自行确定网段和ipoptional: trueversion: 2
应用网络修改
# 应用网络修改,ssh连接会断开,请重新根据新的ip地址
sudo netplan apply
4. DHCP服务设置
4.1 安装isc-dhcp-server
apt install isc-dhcp-server -y
4.2 配置isc-dhcp-server
4.2.1 修改DHCP服务的网口
sudo vim /etc/default/isc-dhcp-server
# 指定为某个网卡提供DHCP服务
INTERFACESv4="enp2s0"
# 若设置网桥,请填入网桥名称
# INTERFACESv4="br0"
INTERFACESv6=""
4.2.1 配置DHCP网段信息
sudo vim /etc/dhcp/dhcpd.conf
# 子网划分为192.168.2.0/24网段
subnet 192.168.2.0 netmask 255.255.255.0 {# 设置DHCP服务提供的ip地址范围range 192.168.2.10 192.168.2.200;# 设置DHCP的默认网关,即已配置的Lan口ip/地址网桥ipoption routers 192.168.2.1;# 该网段的广播地址option broadcast-address 192.168.2.255;# DNS服务器,使用光猫/上一级路由器提供的DNS服务,也可自定义例如8.8.8.8之类的DNS服务option domain-name-servers 192.168.1.1;# 默认租约时间default-lease-time 600;# 最大租约时间max-lease-time 7200;
}
重启isc-dhcp-server服务
# 重启isc-dhcp-server服务
sudo service isc-dhcp-server restart
# 查看isc-dhcp-server状态, 注:若lan口没有接入设备,状态会显示未启用状态,请接入设备后测试
sudo service isc-dhcp-server status
5. 无线AP热点配置
首先请确认您的设备存在无线网卡,没有无线网卡请跳过该节
如果无线网卡无法识别,例如ax101型号,请升级更高版本的Linux内核,推荐下载离线包安装更新(6.4+)
解决方案参考帖子:AX101 Ubuntu 22.04 or 22.10 driver
内核升级参考资料:升级 Ubuntu Linux 内核的几种不同方法 | Linux 中国
5.1 安装hostapd
apt install hostapd -y
5.2 配置hostapd
# 默认不存在该文件
sudo vim /etc/hostapd/hostapd.conf
# 设置无线网卡名称
interface=wlo1
# 设置网桥,若无网桥设置请注释
bridge=br0
# 驱动,wext(旧版)/nl80211(新版),一般使用nl80211
driver=nl80211
# 无线网使用的网络协议,默认启用
ieee80211n=1
# 模式选择,g:2.4Ghz
hw_mode=g
# 信道,2.4GHZ(1~14)
channel=6
# 热点名称
ssid=ubuntu
# 热点密码
wpa_passphrase=123123123
# 选择加密方式为WPA2,常用加解密方法是有WEP、WPA、WPA2、WPA3
wpa=2
# 加密方式
wpa_key_mgmt=WPA-PSK
# 加密算法
rsn_pairwise=CCMP TKIP
wpa_pairwise=TKIP CCMP
参考资料:WLAN无线技术基本概念(802.11a/b/g/n/ac/ax区别,频段,信道概念)
加载hostapd配置文件
# -B 后台运行
sudo hostapd /etc/hostapd/hostapd.conf -B
其他
# hostapd服务的启动、暂停、重启、状态查询
sudo service hostapd start/stop/restart/status
# 启用开机服务(默认应该已启用)
sudo systemctl enable hostapd
# 无线网卡的启动和停止
sudo ip link set wlo1 up/down
6. 启用ip 转发功能
sudo vim /etc/sysctl.conf
# 末尾添加
net.ipv4.ip_forward=1
7. 启用NAT地址转换功能
# 启用nat
sudo iptables -t nat -A POSTROUTING -0 enp1s0 MASQUERADE
# 重启后需要再次执行该命令,暂未找到方便的自启方法# 可保存当前防火墙规则
sudo iptables-save ./iptables.ini
#重启后加载
sudo iptables-restore ./iptables.ini
这段命令是在iptables的nat表中添加了一条POSTROUTING规则,其作用是对enp1s0(wan口)的出站流量进行NAT处理。具体来说,这条规则会在lan口设备的出站流量经过enp1s0时,将源IP地址从lan口设备的IP地址(例如192.168.2.100)替换为enp1s0的IP地址(例如192.168.1.5),从而实现内部网络设备访问外部网络的功能。
这种NAT处理方式称为MASQUERADE,它可以动态地为内部网络设备分配外部IP地址,并保护内部网络的隐私。在这种情况下,lan口设备可以使用自己的DHCP服务器分配的IP地址(例如192.168.2.100)在内部网络中进行通信,而当它们需要访问外部网络时,就会经过enp1s0进行NAT处理,从而使得外部网络看到的源IP地址是enp1s0的IP地址。