确保Linux系统启用了IP转发。在/etc/sysctl.conf
文件中,将net.ipv4.ip_forward的值设置为1:net.ipv4.ip_forward = 1
保存更改后,通过运行sudo sysctl -p命令使其生效。
确保已正确配置网络接口。你需要至少两个网络接口,一个连接到Internet,一个连接到你的局域网。
假设Internet接口为eth0,局域网接口为eth1。
接下来使用不同的防火墙举例:
iptables
# 清除所有已有的iptables规则
iptables -F
# 删除所有自定义的iptables链
iptables -X
# 设置默认策略
iptables -P INPUT ACCEPT
iptables -P FORWARD ACCEPT
iptables -P OUTPUT ACCEPT
# 开启网络地址转换
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
# 允许局域网访问Internet的流量
iptables -A FORWARD -i eth1 -o eth0 -j ACCEPT
# 允许Internet访问局域网的已建立连接的流量
iptables -A FORWARD -i eth0 -o eth1 -m state --state RELATED,ESTABLISHED -j ACCEPT
# 保存配置
iptables-save > /etc/sysconfig/iptables
firewalld
# 将eth0接口划分到公共区域
firewall-cmd --zone=public --change-interface=eth0 --permanent
# 将eth1接口划分到受信任区域。
firewall-cmd --zone=trusted --change-interface=eth1 --permanent
# 启用转发
firewall-cmd --zone=public --add-masquerade --permanent
# 重新加载防火墙规则
firewall-cmd --reload
nftables
编辑/etc/nftables.conf
#!/usr/sbin/nft -f
table ip nat {
chain prerouting {
type nat hook prerouting priority 0;
}
chain postrouting {
type nat hook postrouting priority 100;
oif eth0 masquerade;
}
}
table ip filter {
chain input {
type filter hook input priority 0;
}
chain forward {
type filter hook forward priority 0;
ct state { established, related } accept;
iifname "eth1" ct state new accept;
oifname "eth0" accept;
reject;
}
chain output {
type filter hook output priority 0;
}
}