Linux单网卡共享上网是指在一台Linux服务器上,通过一个网络接口(网卡)实现多台设备共享上网的功能。以下是关于这个问题的详细解答:
以下是在Linux系统中设置单网卡共享上网的基本步骤:
编辑 /etc/sysctl.conf
文件,添加或修改以下行:
net.ipv4.ip_forward = 1
然后运行以下命令使更改生效:
sysctl -p
假设你的内网IP范围是 192.168.1.0/24
,外网接口是 eth0
,内网接口是 eth1
。
# 清除现有规则
iptables -F
iptables -t nat -F
# 设置默认策略
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
# 启用NAT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 允许内网访问外网
iptables -A FORWARD -i eth1 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
为了防止重启后规则丢失,可以将这些规则保存到一个文件中,并在系统启动时加载。
创建一个脚本 /etc/network/if-up.d/iptables
:
#!/bin/sh
iptables-restore < /etc/iptables/rules.v4
确保脚本可执行:
chmod +x /etc/network/if-up.d/iptables
sysctl net.ipv4.ip_forward
确认值为1。iptables -L -v -n
查看规则是否正确。以下是一个完整的示例脚本,用于设置单网卡共享上网:
#!/bin/bash
# 启用IP转发
echo "net.ipv4.ip_forward = 1" >> /etc/sysctl.conf
sysctl -p
# 配置iptables
iptables -F
iptables -t nat -F
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth1 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
iptables -A FORWARD -i eth0 -o eth1 -j ACCEPT
# 持久化iptables规则
cat <<EOF > /etc/iptables/rules.v4
*filter
:INPUT ACCEPT [0:0]
:FORWARD ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
-A FORWARD -i eth1 -o eth0 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -i eth0 -o eth1 -j ACCEPT
COMMIT
*nat
:PREROUTING ACCEPT [0:0]
:INPUT ACCEPT [0:0]
:OUTPUT ACCEPT [0:0]
:POSTROUTING ACCEPT [0:0]
-A POSTROUTING -o eth0 -j MASQUERADE
COMMIT
EOF
iptables-restore < /etc/iptables/rules.v4
echo "iptables rules saved and restored."
通过以上步骤和示例代码,你应该能够在Linux系统上成功实现单网卡共享上网。
领取专属 10元无门槛券
手把手带您无忧上云