利用工控机搭建软路由实现校园网单账户多用


闲话

今年考上了自己学校的研究生后,被分配到了学校的双人间,入住后发现宿舍里面只有一个可用网口(因为宿舍是单人间改的双人间,还特别小),本科期间舍友搭了个软路由用于提供宿舍内部使用无线网络(因为校园网的无线网太差了),因此向其寻求帮助并了解到了软路由的一些基本知识,故而有了这篇学习笔记

知识点

路由转发、DHCP、iptables、校园网

搭建过程:

① 硬件购置

  • 先去闲鱼上购买一个二手的工控机(这里使用的是J1900软路由工控机),要求搭配双网口(千兆最好),内存和硬盘无要求(有个人需求可以让店家帮你升级配置,一般应该可以diy的)
  • 然后再购置一个路由器或者交换机,用于后续的多设备联网(或者搭wifi)
  • 还要备好若干网线,一条vga线(工控机的显示口是vga的,你得接上屏幕了才能操作,不然你看啥)

② 环境准备

  • 工控机刷一个linux环境(可以让店家帮你刷好),这边用到的是Ubuntu22.04
  • 去学校网站下一个linux版本的校园网认证系统(没有linux版本的话可能就寄了),这边用到的是锐捷的linux版本,然后拉到工控机里(用u盘cp或者直接在工控机里拉取都行,直接拉取的前提是有网)

③ 搭建

可以先给工控机通上网络,以便后续的一些软件包的下载:
将前文下载的linux版本的锐捷客户端在工控机中运行,认证成功后方可通网

  • 准备完毕后,工控机接上电源和屏幕,进入系统开始搭建环境(记得找店家要root的密码)。
  • 建议先修改一下系统的apt源,方便后续的工具下载,推荐aliyun源:
sudo mv /etc/apt/sources.list /etc/apt/sources.list.bak
sudo vim /etc/apt/sources.list

#写入以下内容
deb https://mirrors.aliyun.com/ubuntu focal main restricted
deb https://mirrors.aliyun.com/ubuntu focal-updates main restricted
deb https://mirrors.aliyun.com/ubuntu focal universe
deb https://mirrors.aliyun.com/ubuntu focal-updates universe
deb https://mirrors.aliyun.com/ubuntu focal multiverse
deb https://mirrors.aliyun.com/ubuntu focal-updates multiverse
deb https://mirrors.aliyun.com/ubuntu focal-backports main restricted universe multiverse
deb https://mirrors.aliyun.com/ubuntu focal-security main restricted
deb https://mirrors.aliyun.com/ubuntu focal-security universe
deb https://mirrors.aliyun.com/ubuntu focal-security multiverse

#保存后,执行下面指令
sudo apt update
  • 如果系统没有ifconfig命令,命令不可用,则安装net-tools工具:
sudo apt install net-tools

#然后就可以查看网卡信息
ifconfig -a
  • (非必要)修改网卡名为eth0,eth1(每个人的网卡名不同):
sudo vim /etc/default/grub

#找到GRUB_CMDLINE_LINUX=""改为
GRUB_CMDLINE_LINUX="net.ifnames=0 biosdevname=0" 

#保存后执行
sudo grub-mkconfig -o /boot/grub/grub.cfg

#修改/etc/netplan/中的yaml文件(每个人的可能会有不同)
sudo vim /etc/netplan/00-installer-config.yaml

#将对应的网卡名改为eth0和eth1,后续把0做wan口,1做lan口

#保存后,重启工控机
sudo reboot now
  • 配置网卡地址,将lan口(eth1)设置为静态ip
#修改/etc/netplan/中的yaml文件(每个人的可能会有不同)

#参考如下(要注意空格 缩进等)
# This is the network config written by 'subiquity'
network:
  ethernets:
    eth0:
      dhcp4: yes
    eth1:
      dhcp4: no
      optional: true
      addresses: #ip地址要跟wan口在不同网段
        - 192.168.99.1/24
  version: 2
  renderer: networkd
  
#保存后执行
sudo netplan apply

#*执行后,通过ifconfig查看eth1网卡应该会显示有对应的ip地址,与上面设置的为同一个,如果没有,可能是配置文件中的一些细节没写好(缩进,空格等)
  • 配置dhcp(用于给客户机分配ip)
#安装isc-dhcp-server
sudo apt-get install isc-dhcp-server

#修改配置文件/etc/default/isc-dhcp-server(如果需要用到ipv6,也可以将interfacesv6一并配置)
INTERFACESv4=""
	↓↓↓↓↓
INTERFACESv4="eth1"


#修改/etc/dhcp/dhcpd.conf
option domain-name-servers ns1.example.org, ns2.example.org;
	↓↓↓↓↓
option domain-name-servers 8.8.8.8,114.114.114.114;

#在末尾增加以下内容
subnet 192.168.99.0 netmask 255.255.255.0 {
  range 192.168.99.100 192.168.99.254;
  option domain-name-servers 192.168.99.1;
  option subnet-mask 255.255.255.0;
  option broadcast-address 192.168.99.255;
  option routers 192.168.99.1;
}

#修改/etc/dhcp/dhcpd6.conf(没有ipv6需要可不配置)
#在末尾添加以下内容
subnet6 2001:db8:0:1::/64 {
        # Range for clients
        range6 2001:db8:0:1::129 2001:db8:0:1::254;

        # Range for clients requesting a temporary address
        range6 2001:db8:0:1::/64 temporary;

        # Additional options
        option dhcp6.name-servers fec0:0:0:1::1;
        option dhcp6.domain-search "domain.example";

        # Prefix range for delegation to sub-routers
        prefix6 2001:db8:0:100:: 2001:db8:0:f00:: /56;

        # Example for a fixed host address
        host specialclient {
                host-identifier option dhcp6.client-id 00:01:00:01:4a:1f:ba:e3:60:b9:1f:01:23:45;
                fixed-address6 2001:db8:0:1::127;
        }
}  


#重启dhcp server
sudo systemctl restart isc-dhcp-server
sudo systemctl status isc-dhcp-server
  • 开启linux内核的路由转发功能
#开启root用户
su -

#把eth1网卡的数据包通过nat转发到eth0,根据自己的需要修改相应的网卡
echo "1" > /proc/sys/net/ipv4/ip_forward
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -m state --state ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE

#保存iptables规则
sudo iptables-save > /etc/iptables.rules
sudo iptables-save > /etc/iptables/rules.v4

#安装iptables-persistent软件包,安装过程会询问是否将当前iptables规则保存到文件中,选择y,继续安装
sudo apt-get install iptables-persistent

#安装完成后,iptables-persistent就会自动加载保存的iptables规则文件,重启后也会自动加载
  • 配置dns
#停用系统自带的dns
sudo systemctl disable systemd-resolved
sudo systemctl stop systemd-resolved

#删除符号链接的resolv.conf文件
sudo rm /etc/resolv.conf
echo "nameserver 8.8.8.8" > /etc/resolv.conf

#安装dnsmasq
sudo apt-get install dnsmasq
sudo systemctl restart isc-dhcp-server

#完成上述流程后,正常情况下客户机电脑可以通过eth1自动获取ip和dns
  • 通过lan口(eth1)连接客户机(自己的电脑),此时应该可以顺利接通网络

④可能会遇到的问题

在配置过程中,实际遇到的问题还是有点多的,但我忘记了,想到了回来补)

qwq