当前位置: 首页 > news >正文

Ubuntu Linux双网口主机实现在校园网环境下的网络共享

实例描述:

双千兆网口x86架构主机,Ubuntu Linux 22.04 Desktop版(Server版本同理),enp1s0连接需要认证的校园网(可能有设备最大连接数限制),enp2s0连接路由器。此时假设Ubuntu Linux已经通过校园网的认证并设置无感上网。

需求

让enp1s0的网络转发到enp2s0的路由器里面,无需认证实现上网冲浪。

一、设置网卡

使用ifconfig查看网卡信息,如图:
屏幕截图 2025-10-12 010943
netplan中设置网卡:
sudo nano /etc/netplan/00-installer-config.yaml
yaml 文件名称可能不同,tab出来哪个就是哪个。
配置文件修改如下,其中enp2s0连接路由器,address是内网局域网的网关,是自己定的。无线网卡设置不在这里,默认就行。

# This is the network config written by 'subiquity'
version: 2
network:ethernets:enp2s0:dhcp4: falseaddresses:- 172.168.2.1/24

让enp1s0使用DHCP服务获取校园网给定的ip地址,enp2s0使用静态ip并分配网段,可以为192.168.1.1/24172.10.0.1/2410.0.0.1/24等私网ip,子网掩码分别为255.255.255.0255.255.0.0255.0.0.0,子网掩码代表了最大可分配给设备ip的数量。
ctrl + X 按下Y回车保存退出
使配置生效:
sudo netplan apply

二、开启内核转发

编辑/etc/sysctl.conf配置文件,
sudo nano /etc/sysctl.conf
找到#net.ipv4.ip_forward=1这一行,去掉注释,改为 net.ipv4.ip_forward=1
使生效:
sudo sysctl -p

三、配置NAT转发规则

sudo iptables -t nat -A POSTROUTING -s 172.168.2.0/24 -o enp1s0 -j MASQUERADE
使用sudo iptables -t nat -nL 查看配置规则,sudo iptables -t nat -F 清空规则。
这条命令让来自 172.168.2.0/24 网段的所有流量(all 协议),在离开本机时会进行 IP 伪装(MASQUERADE),通常用于共享本机网络。
172.168.2.0/24 网段的设备通过本机的公网 IP 访问外部网络。

然而这是临时的,服务器重启后便会失效,因此使用iptables-persistent工具永久保存。
sudo apt install iptables-persistent
netfilter-persistent save

四、配置DHCP服务

使用isc-dhcp-server
sudo apt install isc-dhcp-server -y
修改配置文件
sudo nano /etc/default/isc-dhcp-server
屏幕截图 2025-10-12 012321

第一个ipv4协议改为要连接路由器网口的名称。
接下来修改dhcpd.conf文件
sudo nano /etc/dhcp/dhcpd.conf
前面的全部注释(注意确保所有内容全为#注释,否则将影响路由规则),添加以下内容在最后:

subnet 172.168.2.0 netmask 255.255.255.0 {range 172.168.2.10 172.168.2.233;option routers 172.168.2.1;option domain-name-servers 172.168.2.1;option broadcast-address 172.168.2.255;default-lease-time 600;max-lease-time 7200;
}

最后重启DHCP服务
sudo service isc-dhcp-server restart

大功告成,试着运行sudo systemctl status isc-dhcp-server查看运行情况
屏幕截图 2025-10-12 012644

出现active(running)即代表DHCP服务正常运行,从下面的输出能看到路由器通过DHCP获取到的IP地址和路由器WAN网口的MAC地址。
后把DHCP服务器加入开机自启计划
sudo systemctl enable isc-dhcp-server
验一下
sudo systemctl enable isc-dhcp-server
出现enable则代表已经加入开机自启。

四、测试

ping 一下enp1s0获取到的DNS和网关,看看能不能通。
ping一下enp2s0的通过enp1s0获取到的DNS和网关,看看能不能通。
ping一下外部网络,如cn.bing.com,www.baidu.com, 看看能不能通。
以上三者全部返回数据包,则任务圆满完成。

其他

我在测试的过程中遇到了dns问题,isc-dhcp-server返回内容全部正常,但就是连接不上网络,检查发现dns诊断出错了,使用dig @172.168.2.1 www.baidu.com 也能正常返回结果,nslookup www.baidu.com 172.168.2.1也正常,但就是死活连不上,最终我排查了是不是防火墙的问题……

sudo iptables -L FORWARD -v -nroot@cherry:~# sudo iptables -L FORWARD -v -n
Chain FORWARD (policy DROP 9570 packets, 631K bytes)
pkts bytes target     prot opt in     out     source               destination
9596  633K ufw-before-logging-forward  all  --  *      *       0.0.0.0/0            0.0.0.0/0
9596  633K ufw-before-forward  all  --  *    *       0.0.0.0/0            0.0.0.0/0
9570  631K ufw-after-forward  all  --  *    *       0.0.0.0/0            0.0.0.0/0
9570  631K ufw-after-logging-forward  all  --  *    *       0.0.0.0/0            0.0.0.0/0
9570  631K ufw-reject-forward  all  --  *    *       0.0.0.0/0            0.0.0.0/0
9570  631K ufw-track-forward  all  --  *    *       0.0.0.0/0            0.0.0.0/0

看到iptables的FORWARD链默认策略是DROP,并且有UFW(Uncomplicated Firewall)规则在管理流量。问题很可能出在UFW没有允许DNS流量转发。
先检查UFW状态和规则

sudo ufw status verbose

然后允许DNS流量通过UFW

sudo ufw allow in on enp2s0 to any port 53 proto udp
sudo ufw allow out on enp2s0 to any port 53 proto udp
# 或者更简单地允许所有转发(如果安全允许)
sudo ufw default allow routed

直接配置UFW转发规则也行

# 启用IP转发
sudo ufw --force enable
# 允许端口转发
echo 'DEFAULT_FORWARD_POLICY="ACCEPT"' | sudo tee -a /etc/default/ufw
# 再添加NAT规则
sudo sed -i '/^*filter/i *nat\n:POSTROUTING ACCEPT [0:0]\n-A POSTROUTING -o enp1s0 -j MASQUERADE\nCOMMIT\n' /etc/ufw/before.rules

最后重启UFW服务

sudo ufw disable
sudo ufw enable

验证一下,强烈的预感

sudo iptables -L FORWARD -v -n
sudo ufw status verbose

测一下DNS转发
在其他设备上测试:

nslookup www.baidu.com 172.168.2.1

ok啊,大功告成,累死我了。

http://www.hskmm.com/?act=detail&tid=29056

相关文章:

  • C# Avalonia 16- Animation- ExpandElement
  • DshanPI-A1 RK3576 armbian远程桌面
  • Docker安装MQTT
  • Ubuntu Linux双网卡实现在校园网环境下的网络共享
  • PVE8.x仅克隆虚拟机配置
  • 常用的sql语句
  • SQL常用语句分类及示例
  • 台式机主板上的电池要更换啦
  • 微信小程序 app.js中onLaunch中方法执行完毕后再执行index首页数据请求
  • 轻量服务器Lighthouse + 1Panel 部署.NET 8 Web应用
  • bash alias 多引号问题
  • 关于近期调研各类游戏开发引擎的一些感想
  • Electron38-Vue3OS客户端OS系统|vite7+electron38+arco桌面os后台管理
  • 终于在vim中用上了molokai的炫酷色彩配置了(゚∀゚)
  • 我是如何在Vim8.1中安装好的NERDTree插件的
  • Kafka监控工具 EFAK-AI 介绍
  • 视频拍摄技巧 - 希区柯克变焦/滑动变焦 All In One
  • 信息化说课-教学设计(6)
  • 记录:git
  • 实验1 现代C++编程初体验
  • 10.11总结
  • 2025年10月门窗十大品牌最新推荐榜单,十大品牌测评排名与选择指南
  • CF60E Mushroom Gnomes
  • CF691E Xor-sequences
  • LCPC12E - Johnnys Empire 题解
  • 中微笔记-cp.1 技术
  • P1896 [SCOI2005] 互不侵犯小总结
  • 美国能源部《生成式人工智能参考指南》解读
  • 分析InfluxDB中读取时CPU飙升
  • win10系统访问smb服务时提示密码错误