插件窝 干货文章 用Linux系统设置共享上网

用Linux系统设置共享上网

iptables sudo 方法 bash 36    来源:    2025-05-14

在Linux系统中设置共享上网(即让一台Linux主机作为网关,将网络连接共享给局域网内其他设备)可以通过多种方式实现,以下是常见的几种方法:


方法1:使用iptables(传统防火墙规则)

适用于临时共享或简单网络环境。

步骤:

  1. 启用IP转发
    编辑 /etc/sysctl.conf,取消以下行的注释:

    net.ipv4.ip_forward=1
    

    立即生效:

    sudo sysctl -p
    
  2. 配置iptables规则
    假设:

    • 外网接口:eth0(连接互联网)
    • 内网接口:eth1(连接局域网,IP为 192.168.1.1

    执行以下命令:

    sudo iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    sudo iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
    sudo iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
    
  3. 保存iptables规则
    (根据发行版选择以下一种方式)

    • Debian/Ubuntu: bash sudo apt install iptables-persistent sudo netfilter-persistent save
    • CentOS/RHEL: bash sudo service iptables save
  4. 客户端配置
    将局域网内其他设备的默认网关设为 192.168.1.1,DNS可设置为公共DNS(如 8.8.8.8)。


方法2:使用nftables(替代iptables的现代工具)

适用于较新的Linux发行版(如CentOS 8+、Ubuntu 20.04+)。

步骤:

  1. 启用IP转发(同方法1)。

  2. 配置nftables规则
    创建规则文件 /etc/nftables.conf,内容如下:

    table ip nat {
       chain postrouting {
           type nat hook postrouting priority srcnat;
           oifname "eth0" masquerade
       }
    }
    table ip filter {
       chain forward {
           type filter hook forward priority 0;
           iifname "eth1" oifname "eth0" accept
           iifname "eth0" oifname "eth1" ct state established,related accept
       }
    }
    

    加载规则:

    sudo nft -f /etc/nftables.conf
    
  3. 开机自启

    sudo systemctl enable nftables
    

方法3:使用NetworkManager(图形界面/命令行)

适用于桌面版Linux(如Ubuntu GNOME)。

图形界面步骤:

  1. 打开 Settings > Network
  2. 选择已连接互联网的接口(如Wi-Fi),进入 IPv4IPv6 设置。
  3. 选择 "Shared to other computers",保存。

命令行步骤:

nmcli connection modify <WIFI连接名> ipv4.method shared
nmcli connection up <WIFI连接名>

方法4:使用dnsmasq(简易DHCP+DNS服务)

适用于需要自动分配IP的场景。

  1. 安装dnsmasq

    sudo apt install dnsmasq  # Debian/Ubuntu
    sudo yum install dnsmasq  # CentOS/RHEL
    
  2. 配置dnsmasq
    编辑 /etc/dnsmasq.conf

    interface=eth1
    dhcp-range=192.168.1.100,192.168.1.200,255.255.255.0,24h
    
  3. 启动服务

    sudo systemctl start dnsmasq
    sudo systemctl enable dnsmasq
    
  4. 配置iptables/nftables(参考方法1或方法2)。


验证共享是否成功

  • 在客户端执行: bash ping 8.8.8.8 # 测试网络连通性 nslookup google.com # 测试DNS解析
  • 在Linux主机查看转发状态: bash sudo iptables -t nat -L -v # 或 sudo nft list ruleset

注意事项

  1. 防火墙:确保防火墙(如firewalld/ufw)允许转发。
  2. 接口名称:根据实际替换 eth0/eth1(可用 ip a 查看)。
  3. 双网卡:主机需至少两个网络接口(一个连接外网,一个连接内网)。
  4. NAT:共享上网本质是NAT转发,确保外网接口已正确配置(如DHCP或静态IP)。

根据需求选择最适合的方案。对于临时共享,方法1或方法3更快捷;对于复杂网络,建议结合方法4。