rk3588-ubuntu22.04系统网关实现路由器功能:
场景需求描述:
需求背景:
场景一:通过网线eth0/(路由器wlan0)访问外网:
如果网关 和 设备所处的环境可以通过网线联网或者路由器联网,那么不需要将网关配置成路由器的模式,可以直接通过插入网线,实现互联互通。
场景二:通过4G模块wwan0访问外网:
如果网关 和 设备所处的环境,只有网关可以通过4G联网,那么就需要将网关配置成路由器的模式,让设备通过网线接入网关,实现互联互通。
一个路由器最基础得拥有3个功能:
NAT转发,dhcp服务,dns服务
在路由器中,NAT转发、DHCP服务和DNS服务是最基础的三个功能,它们各自承担着不同的职责,对于网络的正常运作至关重要。以下是这三个功能的具体作用:
- NAT(网络地址转换)
作用:允许内部网络中的多台设备通过一个公共IP地址访问互联网。
- DHCP(动态主机配置协议)服务
-作用:自动分配网络配置信息给连接到网络的设备。
- DNS(域名系统)服务
作用:将人类可读的域名(如 www.example.com)解析为计算机可以识别的IP地址(如 93.184.216.34)。
这三项功能是大多数路由器的核心特性,确保了内部网络设备能够方便、安全地连接到互联网,并且能够有效地管理这些连接。
硬件基础:
最少拥有2个网口,可插入2根网线。
也就是说至少有一个wan口和一个lan口。
一个千兆网络的交换机。
安装系统:
ubuntu22.04系统
操作步骤:
第一步:开启内核路由转发参数:
临时生效:
echo "1" > /proc/sys/net/ipv4/ip_forward
●永久生效:
修改sysctl.conf: net.ipv4.ip_forward = 1
再执行sysctl -p立即生效
第二步:安装DHCP服务器:
sudo apt update
sudo apt install isc-dhcp-server
第三步:配置DHCP服务器:
sudo nano /etc/dhcp/dhcpd.conf
添加以下内容:
subnet 10.0.1.0 netmask 255.255.255.0 {range 10.0.1.20 10.0.1.150;option routers 10.0.1.1;option subnet-mask 255.255.255.0;option domain-name-servers 8.8.8.8, 8.8.4.4;
}
编辑 /etc/default/isc-dhcp-server
文件,指定 eth1
为 DHCP 服务器的接口:
sudo nano /etc/default/isc-dhcp-server将 `INTERFACESv4` 设置为 `eth1`:
INTERFACESv4="eth1"
启动 DHCP 服务器:
sudo systemctl start isc-dhcp-server
sudo systemctl enable isc-dhcp-server
第四步:设置NAT(网络地址转发):
iptables -t nat -A POSTROUTING -o wlan0 -j MASQUERADE
iptables -A FORWARD -i wlan0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth1 -o wlan0 -j ACCEPT
其中wlan0可以替换成wwan0,eth0。
实现了网络地址转换(NAT)和包转发功能,确保内部网络的设备可以通过路由器访问互联网,并且允许合法的响应流量返回。
第五步:Netplan 来配置 LAN 接口的静态 IP 地址:
sudo nano /etc/netplan/orangepi-default.yaml
添加如下内容:
network:version: 2ethernets:eth0:dhcp4: trueeth1:addresses:- 10.0.1.1/24dhcp4: no
应用配置:
sudo netplan apply
此外,也可以通过ip 或者ifconfig命令来配置静态ip,不过是临时生效:
sudo ifconfig eth1 10.0.1.1 netmask 255.255.255.0 up
or
ip addr add 192.168.1.1/24 dev eth1
第六步:脚本实现:
通过脚本来简化上面操作:
#!/bin/bash# 定义接口名
INTERNET_INTERFACE="wlan0" # 连接到互联网的接口
LAN_INTERFACE="eth1" # 连接到内部网络的接口# 启用路由功能
enable_routing() {echo "Enabling routing..."# 启用 IP 转发echo 1 > /proc/sys/net/ipv4/ip_forward# 设置 NATiptables -t nat -A POSTROUTING -o $INTERNET_INTERFACE -j MASQUERADEiptables -A FORWARD -i $INTERNET_INTERFACE -o $LAN_INTERFACE -m state --state RELATED,ESTABLISHED -j ACCEPTiptables -A FORWARD -i $LAN_INTERFACE -o $INTERNET_INTERFACE -j ACCEPT# 配置 DHCP 服务器echo "subnet 10.0.1.0 netmask 255.255.255.0 {range 10.0.1.20 10.0.1.100;option routers 10.0.1.1;option domain-name-servers 8.8.8.8, 8.8.4.4;}" > /etc/dhcp/dhcpd.conf# 设置 /etc/default/isc-dhcp-server 的 INTERFACESv4echo "INTERFACESv4=\"$LAN_INTERFACE\"" > /etc/default/isc-dhcp-server# 启用 DHCP 服务器systemctl restart isc-dhcp-server# 设置 LAN 接口的静态 IPip addr add 10.0.1.1/24 dev $LAN_INTERFACEip link set $LAN_INTERFACE upecho "Routing enabled. You can now share your internet connection."
}# 取消路由功能
disable_routing() {echo "Disabling routing..."# 禁用 IP 转发echo 0 > /proc/sys/net/ipv4/ip_forward# 清除 NAT 规则iptables -t nat -D POSTROUTING -o $INTERNET_INTERFACE -j MASQUERADEiptables -D FORWARD -i $INTERNET_INTERFACE -o $LAN_INTERFACE -m state --state RELATED,ESTABLISHED -j ACCEPTiptables -D FORWARD -i $LAN_INTERFACE -o $INTERNET_INTERFACE -j ACCEPT# 停止 DHCP 服务器systemctl stop isc-dhcp-server# 清除静态 IPip addr del 10.0.1.1/24 dev $LAN_INTERFACE# 恢复 /etc/default/isc-dhcp-server 文件中的 INTERFACESv4 设置echo "INTERFACESv4=\"\"" > /etc/default/isc-dhcp-serverecho "Routing disabled. The interface is now a regular interface."
}# 检查参数
if [ "$1" == "enable" ]; thenenable_routing
elif [ "$1" == "disable" ]; thendisable_routing
elseecho "Usage: \$0 {enable|disable}"exit 1
fi
执行脚本:
./router_setup.sh enable
./router_setup.sh disable
此时,eth1通过网线连接交换机,设备再连接交换机,即可自动获取到ip,并且可以访问外网。
补充:将wlan0,wwan0,eth0作为参数进行传入:
#!/bin/bash# 检查参数数量
if [ "$#" -ne 2 ]; thenecho "Usage: $0 <internet_interface> {enable|disable}"exit 1
fi# 定义接口名
INTERNET_INTERFACE=$1 # 连接到互联网的接口
LAN_INTERFACE="eth1" # 连接到内部网络的接口# 启用路由功能
enable_routing() {echo "Enabling routing..."# 启用 IP 转发echo 1 > /proc/sys/net/ipv4/ip_forward# 设置 NATiptables -t nat -A POSTROUTING -o $INTERNET_INTERFACE -j MASQUERADEiptables -A FORWARD -i $INTERNET_INTERFACE -o $LAN_INTERFACE -m state --state RELATED,ESTABLISHED -j ACCEPTiptables -A FORWARD -i $LAN_INTERFACE -o $INTERNET_INTERFACE -j ACCEPT# 配置 DHCP 服务器echo "subnet 10.0.1.0 netmask 255.255.255.0 {range 10.0.1.10 10.0.1.100;option routers 10.0.1.1;option domain-name-servers 8.8.8.8, 8.8.4.4;}" > /etc/dhcp/dhcpd.conf# 设置 /etc/default/isc-dhcp-server 的 INTERFACESv4echo "INTERFACESv4=\"$LAN_INTERFACE\"" > /etc/default/isc-dhcp-server# 启用 DHCP 服务器systemctl restart isc-dhcp-server# 设置 LAN 接口的静态 IPip addr add 10.0.1.1/24 dev $LAN_INTERFACEip link set $LAN_INTERFACE upecho "Routing enabled. You can now share your internet connection."
}# 取消路由功能
disable_routing() {echo "Disabling routing..."# 禁用 IP 转发echo 0 > /proc/sys/net/ipv4/ip_forward# 清除 NAT 规则(先检查规则是否存在)iptables -t nat -C POSTROUTING -o $INTERNET_INTERFACE -j MASQUERADE && \iptables -t nat -D POSTROUTING -o $INTERNET_INTERFACE -j MASQUERADEiptables -C FORWARD -i $INTERNET_INTERFACE -o $LAN_INTERFACE -m state --state RELATED,ESTABLISHED -j ACCEPT && \iptables -D FORWARD -i $INTERNET_INTERFACE -o $LAN_INTERFACE -m state --state RELATED,ESTABLISHED -j ACCEPTiptables -C FORWARD -i $LAN_INTERFACE -o $INTERNET_INTERFACE -j ACCEPT && \iptables -D FORWARD -i $LAN_INTERFACE -o $INTERNET_INTERFACE -j ACCEPT# 停止 DHCP 服务器systemctl stop isc-dhcp-server# 清除静态 IPip addr del 10.0.1.1/24 dev $LAN_INTERFACE 2>/dev/null# 恢复 /etc/default/isc-dhcp-server 文件中的 INTERFACESv4 设置echo "INTERFACESv4=\"\"" > /etc/default/isc-dhcp-serverecho "Routing disabled. The interface is now a regular interface."
}# 检查操作参数
case $2 inenable)enable_routing;;disable)disable_routing;;*)echo "Usage: $0 <internet_interface> {enable|disable}"exit 1;;
esac