使用OpenWRT一段时间了,发现OpenWRT确实强大,但是LuCI其配置过于简单,且而且自己编译的有些小Bug,所以决定在Linux上安装软件包,将Raspbian改造成路由器系统!
准备工作
第一步 更换国内软件源
这个很简单,比如说使用清华源,将/etc/apt/sources.list
改为:
deb https://mirrors.tuna.tsinghua.edu.cn/raspbian/raspbian/ buster main contrib non-free rpi
再将/etc/apt/sources.list.d/raspi.list
改为:
deb https://mirrors.tuna.tsinghua.edu.cn/raspberrypi/ buster main
然后更新软件列表:
sudo apt update
最好更新一下软件包,并重启:
sudo apt upgrade
sudo reboot
第二步 检查网络环境
我的硬件环境是:
树莓派3B+ x1,USB网卡 x1,(USB无线网卡x1),TP-LINK无线路由器 x1
在这里我们要实现的是传统的路由,而不是单臂路由(只有一个有线接口),所以我给树莓派加了一个有线网卡。那么树莓派现在就有两个有线接口加一个无线接口了。现在我们使用ifconfig命令看看接口:
现在应该列出了四个网络接口。eth0、eth1是有线接口,wlan0是无线接口,lo是local,本地接口。我这里已经通过wifi联网,所以有ip地址等信息。
那么下面就根据不同情景配置不同功能:
功能实现
基本的安全策略
既然是路由器,也就是内网与外网的防火墙,我们需要增强整个系统的安全性。
首先从路由器自身的角度来说,应该不允许任何来自外网的连接:
iptables -t filter -P INPUT DROP
对于保障内网设备不被路由,应该不允许任何来自外网的转发:
iptables -t filter -P FORWARD DROP
NAT网关
NAT,网络地址转换,是为了解决IPv4地址不够用而生的一项技术,是家用路由器的基本功能。
IPv4 NAT
内网网段192.168.1.x的数据包进行NAT:
第一步,打开IPv4内核转发:
sysctl -w net.ipv4.ip_forward=1
第二步,开启IPv4 NAT:
iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -j MASQUERADE
IPv6 NAT
内网地址为dddd::0/48的IPv6地址进行NAT:
第一步,开启IPv6内核转发:
sysctl -w net.ipv6.conf.all.forwarding=1
第二步,开启IPv6 NAT:
ip6tables -t nat -I POSTROUTING -s dddd::0/48 -j MASQUERADE
NAT端口映射
将公网网卡88端口映射到内网192.168.1.2:80上
数据包入站时使用DNAT:
iptables -t nat -I PREROUTING --dport 88 -j DNAT --to-destination 192.168.1.2:80
数据包出站时无需配置。如果再次配置SNAT将会使数据包不具有公网标识性(服务器日志记录的全是来自路由器的请求)。而且注意此时路由器(树莓派)不能通过访问localhost:88来访问被映射的主机。具体原因可看iptables原理。
开放路由器端口
iptables -I INPUT -p tcp --dport 80 -j ACCEPT
UPnP配置
安装软件包miniupnpd,即可提供upnp端口映射服务:
apt install miniupnpd
PPPoE拨号配置
锐捷认证配置
DHCP服务搭建
IPv6的DHCP中继
DNS缓存服务搭建
高级安全策略
允许ICMP
限制ICMP连接数
防止SYN泛洪
编写脚本
编写防火墙脚本
编写网络初始化脚本
编写维护管理脚本
FAQ
1、为什么ifconfig只有三个设备:eth0 wlan0 lo?
先检查是否插入USB网卡,如果已经插入,看看是不是USB线松了,还有USB网卡是不是坏了,是不是不兼容。可能需要换一个网卡。
2、是否有其他国内源?
当然有,除了清华还有中科大源等等。如果清华源速度不理想可以更换其他源。