成为一台合格的路由器
以下所有内容基础环境, 笔记本操作系统:ubuntu22.04 desktop,主路由:tplink,局域网路由:hauwei ax3pro
网络拓扑结构
![](https://img.haomeiwen.com/i20880653/3e35bfb174490ddf.png)
局域网内所有设备连接在一台华为的 AX3Pro(3000M) 上,AX3Pro wan口连接到笔记本有线网口通过笔记本DHCP服务获取wan口ip,笔记本开启IP转发/使用tproxy接管流量并通过无线连接主路由
关于笔记本与主路由的连接方式为什么采用无线,主要是布线问题。另外对延迟没有太高要求故采用无线连接
dhcp server (isc-dhcp-server)
上文说到局域网路wan口ip需要由笔记本分配,所以需要在笔记本搭建dhcp-server,本次采用 isc-dhcp-server
安装
sudo apt install isc-dhcp-server
配置
首先指定绑定的网口,编辑配置文件/etc/default/isc-dhcp-server
INTERFACESv4="eno1"
将eno1
修改为你自己的网卡名称
为网卡配置静态ip
因为 AX3Pro 是wan,lan自适应口,直连后极有可能有线网卡获取到 AX3Pro 分配下来的IP(前提是开启dhcp,当前发行版默认是开启的)此时会导致isc-dhcp-server 在此网卡上监听失败
Ubuntu 22.04 使用 netplan 管理网络,编辑配置文件/etc/netplan/00-installer-config.yaml
network:
version: 2
renderer: networkd
ethernets:
eno1:
dhcp4: false
addresses: [192.168.10.1/24]
192.168.10.1/24
即你想要的IP,不需要设置网关,因为改网卡是作为我们的流量入口
修改完成后 sudo netplan apply
应用刚才的修改
配置 dhcp server
编辑配置文件/etc/dhcp/dhcpd.conf
在文件末尾添加
subnet 192.168.10.0 netmask 255.255.255.0 {
range 192.168.10.100 192.168.10.200;
option routers 192.168.10.1;
option domain-name-servers 192.168.10.1, 192.168.10.1;
}
range 192.168.10.100 192.168.10.200;
代表分配的范围在 192.168.10.100 - 192.168.10.200
,因为是自己使用,100-200 完全够用了
option routers 192.168.10.1;
为网关地址,是被分配IP设备的默认网关,所以填写,dhcp监听的网卡地址。
option domain-name-servers 192.168.10.1, 192.168.10.1;
为dns服务器地址,默认填网关地址由网关处理
配置完成后重启 dhcp server sudo systemctl restart isc-dhcp-server
此时路由器wan口应该能正正常获取IP,但还无法上网。
路由器wan口ip配置
若不使用dhcp获取路由器wan口ip,在路由器后台将wan口ip配置为与笔记本有线网卡同网段IP即可。但此方案每次在笔记本重启后无法wan口无法向上通信推测为路由器本身机制,原理不详,有了解的大佬欢迎指教
配置IP转发
上文成功配置了 dhcp server 此时路由器已经能够成功获取 wan 口 ip。因为流量到达笔记本网卡后就不知道后续该如何路由了,所以我们需要手动配置指定有线网卡的流量由无线网卡流出。因此必须开启linux路由转发功能,默认linux是禁用的。
永久开启
因为想让笔记本承担路由器的功能这里我们不讨论如何临时开启,直接永久开启路由转发,编辑配置文件/etc/sysctl.conf
将 net.ipv4.ip_forward
设置为 1
net.ipv4.ip_forward = 1
执行 sudo sysctl -p
生效,之后每次重启后据默认开启路由转发。
iptables 配置
刚刚配置了IP转发只是告诉系统允许流量从一个网卡转发到另一个网卡,接下来使用 iptables 配置流量如何转发。
sudo iptables -t nat -A POSTROUTING -o wlsp4 -j MASQUERADE
sudo iptables -A FORWARD -i eno1 -o wlsp4 -m state --state RELATED,ESTABLISHED -j ACCEPT
sudo iptables -A FORWARD -i eno1 -o wlsp4 -j ACCEPT
具体来说
第一条命令告诉系统进行NAT转换,从而可以使源地址修改为无线网卡的IP再发出流量
第二条命令使用了 state 模块对连接状态进行判断(iptables是无状态防火墙)对已经建立的连接流量进行转发
第三条命令用于指定除了已建立连接的其他流量的转发
详情可参考 iptables 使用手册,这里推荐博文()[https://www.zsythink.net/archives/1199]
tproxy
实际应用中并未使用 ip 转发配置而是通过tproxy 接管了局域网所有流量,主要对 PREROUTING 链动手,接管了流量后能做的事就更多了,比如屏蔽广告以及𓂻𑀣𖠗𒊩𓊅𑁒𑁫𓄪𖡣𐑎𓇰𓂺𓁃𓂁𑀾𑁋
至此作为一台路由器它已经可以及格了。
一个奇怪的问题
在路由搭建过程中遇到一个奇怪的问题,局域网路由下设备(AX3Pro见文章开始的拓扑)竟然能ping通笔记本的无线网卡IP,开始以为是路由问题,查看所有路由表没有头绪,随后通过抓包可以发现流量并没有真正发送到无线网卡而是到有线网卡就直接回应了,所以可以猜测为操作系统作祟。
经过google后了解到该行为受一个arp_ignore
内核参数影响,默认为0,表示不管IP是否在此网卡上都会回应。
SMB Server
关于文件系统
linux支持挂载ntfs文件系统,但因驱动问题性能有损失。所以可根据需求格式化为ext4
使用 sudo fdisk -l
查看所有硬盘信息,找到需要当作网络存储的硬盘,假设为/dev/sda1
使用 mkfs.ext4 /dev/sda1
格式化硬盘。注意格式化硬盘会清除所有硬盘内容,请谨慎操作
硬盘挂载
如果你使用移动硬盘你可能需要此内容
编辑/etc/fstab
文件添加一条挂载项
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx /samba/data ext4 defaults 0 0
UUID=xxxxxxxx-xxxx-xxxx-xxxx-xxxxxxxxxxxx | /samba/data | ext4 | defaults | 0 | 0 |
---|---|---|---|---|---|
设备UUID | 挂载路径 | 文件系统类型 | 挂载选项 | 备份标识 | 检查文件系统完整性标识 |
一般后三项 defaults 0 0 即可
设备UUID可使用blkid获得,同时也可使用设备路径例如
/dev/sda1 /samba/data ext4 defaults 0 0
但推荐使用UUID避免硬盘重新插拔产生影响,尤其时移动硬盘
安装samba
sudo apt install samba
编辑配置文件/etc/samba/smb.conf
,在配置文件末尾添加
[wxm]
path = /samba/data
browseable = yes
read only = no
force create mode = 0660
force directory mode = 2770
valid users = wxm
参数 | 作用 |
---|---|
path | 需要共享的目录 |
browseable | 共享是否能够被发现,例如windows点击网络是否能够扫描到你的共享设置为yes即能够被扫描若为no则只能通过手动添加的方式添加改共享 |
read only | 共享文件是否为只读 |
force create mode | 新建文件的权限,这里使用Linux ACL权限配置方式 |
force directory mode | 新建目录权限 |
valid users | 能够登录此共享的用户 |
重启服务:sudo systemctl restart smbd
用户配置
samba使用linux用户进行权限控制,所以创建samba用户前需先创建一个linux用户。
sudo useradd -M -s /usr/sbin/nologin wxm
因为我们并不需要登录所以使用 -s 将 shell 指定为 /usr/sbin/nologin
即禁止用户登录,这里只是不能登录linux系统不必担心无法登录samba,同时我们也不需要家目录使用 -M 参数指定不为改用户创建家目录。当然这两项都是可选的实际根据需求来。
为samba用户配置密码
sudo smbpasswd -a wxm
根据提示两次输入密码即可创建samba用户
有时可能需要使用 sudo smbpasswd -e wxm
来启用账号
ACL权限配置
到这里应该可以登录samba了,但可能无法看到文件。上文中先将硬盘挂载到了/samba/data
又通过配置文件指定共享此目录,但此时新建用户可能并没有此目录的权限。由于samba依赖linux acl做权限控制,所以可以使用任意方式使新建用户wxm拥有/samba/data
读写权限即可(读写仅作示例,可以是任意权限),因为只有自己使用,直接将文件属主改为新建用户(wxm)
sudo chown -R wxm /samba/data/
结语
至此算是将旧设备重新利用了起来,另外本文操作均为后期记录,相比配置时可能会有遗漏欢迎指出。
最后:花开花败总归尘,华门
网友评论