云计算百科
云计算领域专业知识百科平台

Ubuntu20.04服务器开启路由转发让局域网内其他电脑通过该服务器连接外网

要让你的 Ubuntu作为路由器,通过 Wi-Fi 上网,并给连接到 UsbNetwork 的设备提供网络,需要做以下配置:


1. 网络拓扑

[互联网] ← (Wi-Fi, wlo1) → [Ubuntu] ← (USB网络/USB以太网, UsbNetwork) → [设备]

  • Ubuntu:
    • Wi-Fi(wlo1)已连接互联网(比如家庭路由器)。
    • USB网络(UsbNetwork)连接设备(IP: 192.168.2.x)。
  • 设备:
    • 默认网关指向 192.168.2.2(Ubuntu 的 UsbNetwork IP)。

在这里插入图片描述 在这里插入图片描述

2. 在 Ubuntu 上配置路由和 NAT

(1) 启用 IP 转发

sudo sysctl -w net.ipv4.ip_forward=1

永久生效(编辑 /etc/sysctl.conf):

echo "net.ipv4.ip_forward=1" | sudo tee -a /etc/sysctl.conf
sudo sysctl -p

(2) 设置 NAT(让设备通过 Wi-Fi 上网)

sudo iptables -t nat -A POSTROUTING -o wlo1 -j MASQUERADE
sudo iptables -A FORWARD -i eno1 -o wlo1 -j ACCEPT
sudo iptables -A FORWARD -i wlo1 -o eno1 -m state –state RELATED,ESTABLISHED -j ACCEPT

保存 iptables 规则(防止重启失效):

sudo apt install iptables-persistent
sudo netfilter-persistent save

这三条关键的命令解释如下: 当然!这三条 iptables 命令是配置 NAT(网络地址转换) 和 流量转发 的核心规则,用于让连接到 eno1(有线网络)的设备通过 wlo1(Wi-Fi)访问互联网。以下是每条命令的详细解释:


1. sudo iptables -t nat -A POSTROUTING -o wlo1 -j MASQUERADE

作用

启用 源地址转换(SNAT),将来自 eno1(内网)的流量通过 wlo1(外网)转发时,自动修改数据包的 源IP地址,使其看起来是从 Ubuntu 的 wlo1 接口发出的。

关键点
  • -t nat:操作 NAT 表(专门用于地址转换)。
  • -A POSTROUTING:在数据包 离开本机前(Post-Routing)修改源IP。
  • -o wlo1:仅对从 wlo1(Wi-Fi)发出的数据包生效。
  • -j MASQUERADE:动态将内网设备的私有IP(如 192.168.2.x)替换为 wlo1 的当前IP(如 192.168.0.x)。
为什么需要?
  • 内网设备(eno1 下的 192.168.2.x)的IP是私有地址,无法在互联网上路由。
  • 通过 MASQUERADE,外网服务器会将响应包发回 wlo1 的IP,再由 Ubuntu 转发给内网设备。

2. sudo iptables -A FORWARD -i eno1 -o wlo1 -j ACCEPT

作用

允许从 eno1(内网)进入、从 wlo1(外网)离开的流量 通过防火墙。

关键点
  • -A FORWARD:操作 FORWARD 链(控制转发的数据包)。
  • -i eno1 -o wlo1:匹配 进入 eno1 且从 wlo1 出去 的流量。
  • -j ACCEPT:允许这些流量通过。
为什么需要?
  • 默认情况下,Linux 的防火墙会阻止转发流量。
  • 此规则明确允许内网设备访问外网的请求通过。

3. sudo iptables -A FORWARD -i wlo1 -o eno1 -m state –state RELATED,ESTABLISHED -j ACCEPT

作用

允许从 wlo1(外网)返回的、与已有连接相关的流量 通过防火墙,回到 eno1(内网)。

关键点
  • -i wlo1 -o eno1:匹配 进入 wlo1 且从 eno1 出去 的流量。
  • -m state –state RELATED,ESTABLISHED:仅允许 已建立的连接(如内网设备发起的请求的响应包)或 相关的新连接(如FTP的数据连接)。
  • -j ACCEPT:允许这些流量通过。
为什么需要?
  • 确保外网服务器返回的响应包能回到内网设备。
  • 阻止从外网主动发起的非法连接(仅允许“回包”),提升安全性。

三者的协作流程

  • 内网设备(192.168.2.100)访问 8.8.8.8:
    • 数据包进入 eno1 → 被 FORWARD 规则放行 → 经过 POSTROUTING 时源IP被改为 wlo1 的IP → 从 wlo1 发出。
  • Google 服务器 返回响应包:
    • 数据包进入 wlo1 → 被状态检测规则识别为 ESTABLISHED → 放行并转发到 eno1 → 到达内网设备。

  • 验证规则是否生效

    # 查看NAT规则
    sudo iptables -t nat -L -v

    # 查看FORWARD规则
    sudo iptables -L FORWARD -v

    输出示例:

    Chain POSTROUTING (policy ACCEPT 0 packets, 0 bytes)
    pkts bytes target prot opt in out source destination
    10 1200 MASQUERADE all — any wlo1 192.168.2.0/24 anywhere

    Chain FORWARD (policy DROP 0 packets, 0 bytes)
    pkts bytes target prot opt in out source destination
    15 1800 ACCEPT all — eno1 wlo1 anywhere anywhere
    20 2400 ACCEPT

    ### **(3) 配置 DHCP(可选,自动分配 IP)**
    如果你的设备需要自动获取 IP,可以在 Ubuntu 上安装 `isc-dhcp-server`:
    ```bash
    sudo apt install isc-dhcp-server

    编辑 /etc/dhcp/dhcpd.conf:

    subnet 192.168.2.0 netmask 255.255.255.0 {
    range 192.168.2.100 192.168.2.200;
    option routers 192.168.2.2; # 网关指向 Ubuntu
    option domain-name-servers 8.8.8.8, 8.8.4.4;
    }

    指定监听接口(编辑 /etc/default/isc-dhcp-server):

    INTERFACESv4="eno1"

    启动 DHCP 服务:

    sudo systemctl restart isc-dhcp-server


    3. 设备端配置

    (1) 自动获取 IP(推荐)

    • 确保设备设置为 DHCP 自动获取 IP。
    • 设备应该会得到 192.168.2.x 的 IP,网关是 192.168.2.2。

    (2) 手动设置 IP(如果没有 DHCP)

    • IP: 192.168.2.x(如 192.168.2.100)
    • 子网掩码: 255.255.255.0
    • 网关: 192.168.2.2
    • DNS: 8.8.8.8(或你的 ISP DNS)

    4. 测试网络

    (1) 在设备上测试

    ping 192.168.2.2 # 测试到 Ubuntu 的连通性
    ping 8.8.8.8 # 测试外网访问

    • 如果 8.8.8.8 能通,但网页打不开,检查 DNS 设置(设备端手动设 8.8.8.8)。

    (2) 在 Ubuntu 上检查 NAT

    sudo iptables -t nat -L -v # 查看 NAT 规则是否生效

    输出示例: 在这里插入图片描述


    5. 常见问题

    (1) 设备能 ping 通网关,但无法上网

    • 检查 Ubuntu 的 wlan0 是否正常联网:ping 8.8.8.8 # 在 Ubuntu 上测试
    • 检查 NAT 规则:sudo iptables -t nat -L # 确保 POSTROUTING 有 MASQUERADE

    (2) DHCP 不分配 IP

    • 检查 isc-dhcp-server 是否运行:sudo systemctl status isc-dhcp-server
    • 检查 UsbNetwork 是否已分配 IP:ip a show UsbNetwork

    (3) 重启后失效

    • 确保 iptables 规则已保存:sudo netfilter-persistent save
    • 确保 net.ipv4.ip_forward=1 已写入 /etc/sysctl.conf。

    6. 总结

    步骤命令/配置作用
    1. 启用转发 net.ipv4.ip_forward=1 让 Ubuntu 转发流量
    2. 设置 NAT iptables -t nat -A POSTROUTING … 让设备通过 Wi-Fi 上网
    3. 配置 DHCP isc-dhcp-server 自动分配 IP
    4. 设备连接 手动或自动获取 IP 确保网关指向 192.168.2.2

    这样,你的设备就能通过 Ubuntu 的 Wi-Fi 上网了!🚀

    赞(0)
    未经允许不得转载:网硕互联帮助中心 » Ubuntu20.04服务器开启路由转发让局域网内其他电脑通过该服务器连接外网
    分享到: 更多 (0)

    评论 抢沙发

    评论前必须登录!