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

发布于:2024-12-18 ⋅ 阅读:(123) ⋅ 点赞:(0)

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: 2
     ethernets:
       eth0:
         dhcp4: true
       eth1:
         addresses:
           - 10.0.1.1/24
         dhcp4: 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

    # 设置 NAT
    iptables -t nat -A POSTROUTING -o $INTERNET_INTERFACE -j MASQUERADE
    iptables -A FORWARD -i $INTERNET_INTERFACE -o $LAN_INTERFACE -m state --state RELATED,ESTABLISHED -j ACCEPT
    iptables -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 的 INTERFACESv4
    echo "INTERFACESv4=\"$LAN_INTERFACE\"" > /etc/default/isc-dhcp-server

    # 启用 DHCP 服务器
    systemctl restart isc-dhcp-server

    # 设置 LAN 接口的静态 IP
    ip addr add 10.0.1.1/24 dev $LAN_INTERFACE
    ip link set $LAN_INTERFACE up

    echo "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 MASQUERADE
    iptables -D FORWARD -i $INTERNET_INTERFACE -o $LAN_INTERFACE -m state --state RELATED,ESTABLISHED -j ACCEPT
    iptables -D FORWARD -i $LAN_INTERFACE -o $INTERNET_INTERFACE -j ACCEPT

    # 停止 DHCP 服务器
    systemctl stop isc-dhcp-server

    # 清除静态 IP
    ip addr del 10.0.1.1/24 dev $LAN_INTERFACE

    # 恢复 /etc/default/isc-dhcp-server 文件中的 INTERFACESv4 设置
    echo "INTERFACESv4=\"\"" > /etc/default/isc-dhcp-server

    echo "Routing disabled. The interface is now a regular interface."
}

# 检查参数
if [ "$1" == "enable" ]; then
    enable_routing
elif [ "$1" == "disable" ]; then
    disable_routing
else
    echo "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 ]; then
    echo "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

    # 设置 NAT
    iptables -t nat -A POSTROUTING -o $INTERNET_INTERFACE -j MASQUERADE
    iptables -A FORWARD -i $INTERNET_INTERFACE -o $LAN_INTERFACE -m state --state RELATED,ESTABLISHED -j ACCEPT
    iptables -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 的 INTERFACESv4
    echo "INTERFACESv4=\"$LAN_INTERFACE\"" > /etc/default/isc-dhcp-server

    # 启用 DHCP 服务器
    systemctl restart isc-dhcp-server

    # 设置 LAN 接口的静态 IP
    ip addr add 10.0.1.1/24 dev $LAN_INTERFACE
    ip link set $LAN_INTERFACE up

    echo "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 MASQUERADE

    iptables -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 ACCEPT

    iptables -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

    # 清除静态 IP
    ip 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-server

    echo "Routing disabled. The interface is now a regular interface."
}

# 检查操作参数
case $2 in
    enable)
        enable_routing
        ;;
    disable)
        disable_routing
        ;;
    *)
        echo "Usage: $0 <internet_interface> {enable|disable}"
        exit 1
        ;;
esac

在这里插入图片描述


网站公告

今日签到

点亮在社区的每一天
去签到