当前位置: 首页 > news >正文

rk3588-ubuntu22.04系统网关实现路由器功能:

rk3588-ubuntu22.04系统网关实现路由器功能:

场景需求描述:

在这里插入图片描述

需求背景:

场景一:通过网线eth0/(路由器wlan0)访问外网:

如果网关 和 设备所处的环境可以通过网线联网或者路由器联网,那么不需要将网关配置成路由器的模式,可以直接通过插入网线,实现互联互通。

场景二:通过4G模块wwan0访问外网:

如果网关 和 设备所处的环境,只有网关可以通过4G联网,那么就需要将网关配置成路由器的模式,让设备通过网线接入网关,实现互联互通。

一个路由器最基础得拥有3个功能
NAT转发,dhcp服务,dns服务
在路由器中,NAT转发、DHCP服务和DNS服务是最基础的三个功能,它们各自承担着不同的职责,对于网络的正常运作至关重要。以下是这三个功能的具体作用:

  1. NAT(网络地址转换)

作用:允许内部网络中的多台设备通过一个公共IP地址访问互联网。

  1. DHCP(动态主机配置协议)服务

-作用:自动分配网络配置信息给连接到网络的设备。

  1. 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

在这里插入图片描述


http://www.mrgr.cn/news/79718.html

相关文章:

  • nuxt2.0性能优化 ant design vue 组件和图标按需引入
  • Ubuntu中配置交叉编译工具的三条命令的详细研究
  • 【Redis】Redis 缓存更新策略
  • OBS + SRS:打造专业级直播环境的入门指南
  • RK3588 Linux实例应用(2)——SDK与编译
  • Mac/Windows端长期破解myBase8方法(无需安装火绒)
  • 《Hadoop大数据技术应用综合训练》----以NBA冠军球队计数为例
  • C# .NET CORE 开发问题汇总
  • day10 电商系统后台API——接口测试(使用postman)
  • 【Spark】Spark Join类型及Join实现方式
  • 数据结构DAY1
  • 开发EDA工具常用的三方开源
  • 第七天:Linux中文本编辑工具和文本三剑客-grep 第八天:Linux中shell脚本编程1
  • python爬虫--小白篇【爬虫实践】
  • FPGA 17 ,FPGA 与 SR-IOV虚拟化技术,高性能计算与虚拟化技术的结合(FPGA 与 SR-IOV 和 PCI,高性能计算与虚拟化的完美融合)
  • python学opencv|读取图像(七)抓取像素数据顺利修改图像大小
  • Flutter:开发环境搭建和Android Studio创建Flutter Project
  • Harbor 仓库部署(docker-compose 部署方式)
  • coco数据集转换SAM2格式
  • 文件下载和图片预览 Blob FileReader
  • SQL汇总数据:聚集函数
  • linux系统使用nginx代理mysql数据库
  • 分布式 CAP理论 总结
  • 【视频笔记】408新增知识点信号——里昂视频
  • 手里有病理切片+单细胞测序的数据,如何开展医工交叉的研究?
  • 【CSS in Depth 2 精译_073】第 12 章 CSS 排版与间距概述 + 12.1 间距设置(中):对 CSS 行高的深入思考