在Linux系统中设置共享上网(即让一台Linux主机作为网关,将网络连接共享给局域网内其他设备)可以通过多种方式实现,以下是常见的几种方法:
适用于临时共享或简单网络环境。
启用IP转发
编辑 /etc/sysctl.conf
,取消以下行的注释:
net.ipv4.ip_forward=1
立即生效:
sudo sysctl -p
配置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
保存iptables规则
(根据发行版选择以下一种方式)
bash
sudo apt install iptables-persistent
sudo netfilter-persistent save
bash
sudo service iptables save
客户端配置
将局域网内其他设备的默认网关设为 192.168.1.1
,DNS可设置为公共DNS(如 8.8.8.8
)。
适用于较新的Linux发行版(如CentOS 8+、Ubuntu 20.04+)。
启用IP转发(同方法1)。
配置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
开机自启
sudo systemctl enable nftables
适用于桌面版Linux(如Ubuntu GNOME)。
Settings
> Network
。IPv4
或 IPv6
设置。nmcli connection modify <WIFI连接名> ipv4.method shared
nmcli connection up <WIFI连接名>
适用于需要自动分配IP的场景。
安装dnsmasq
sudo apt install dnsmasq # Debian/Ubuntu
sudo yum install dnsmasq # CentOS/RHEL
配置dnsmasq
编辑 /etc/dnsmasq.conf
:
interface=eth1
dhcp-range=192.168.1.100,192.168.1.200,255.255.255.0,24h
启动服务
sudo systemctl start dnsmasq
sudo systemctl enable dnsmasq
配置iptables/nftables(参考方法1或方法2)。
bash
ping 8.8.8.8 # 测试网络连通性
nslookup google.com # 测试DNS解析
bash
sudo iptables -t nat -L -v # 或 sudo nft list ruleset
eth0
/eth1
(可用 ip a
查看)。根据需求选择最适合的方案。对于临时共享,方法1或方法3更快捷;对于复杂网络,建议结合方法4。