当前位置: 首页 > 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.gsyq.cn/news/19229.html

相关文章:

  • Ubuntu Linux双网卡实现在校园网环境下的网络共享
  • 台式机主板上的电池要更换啦
  • 微信小程序 app.js中onLaunch中方法执行完毕后再执行index首页数据请求
  • 轻量服务器Lighthouse + 1Panel 部署.NET 8 Web应用
  • 关于近期调研各类游戏开发引擎的一些感想
  • 终于在vim中用上了molokai的炫酷色彩配置了(゚∀゚)
  • 我是如何在Vim8.1中安装好的NERDTree插件的
  • P12012 [Ynoi April Fools Round 2025] 牢爱 题解
  • 10.11总结
  • CF691E Xor-sequences
  • 分析InfluxDB中读取时CPU飙升
  • 高二停课周记(信息学竞赛) Week1
  • 2025/10/11
  • 十年运维工程师总结
  • 运动控制教学——5分钟学会Dijkstra与A*搜索算法!(附仿真视频及代码) - 教程
  • CNN 发展历程
  • 实验报告5(链栈基本操作,数制转换,匹配算法,伴舞问题)
  • 企业推行OKR中层领导关注的10个关键问题及解决方案
  • P11229 [CSP-J 2024] 小木棍题解
  • 初识pytorch:数据标准化及数据增强的transforms
  • 前端实验(二)模板语法 - 实践
  • Num3:Prompt工程 - 指南
  • 国庆期间做题记录
  • 02020508 EF Core高级08-表达式树、Expression和委托的关系、查看表达式树结构、AST、手动创建表示树、工厂方法
  • commons-net - 详解
  • 02020505 EF Core高级05-实体的5种状态、EntityEntry、AsNoTracking、实体状态跟踪
  • linux防火墙操作命令
  • 机器学习社会影响与导航系统研究
  • 251011
  • 实用指南:漏标(Missing Mark)问题深度解析