如何使用 Linux 主机进行 NAT 和端口转发

如何使用 Linux 主机进行 NAT 和端口转发

我有 Debian 9 主机,有 2 个接口:

  • eth0,连接到互联网;具有 ISP 分配的动态 IP
  • eth1,连接到 LAN 交换机;具有静态 IP;已与 dhcpd 建立了友好关系

我的目标是强制这台电脑像典型的家用路由器一样工作 - “共享互联网连接”,转发流量。上述调整不足以路由流量。我找到了一些方法来打开它:

modprobe iptable_nat
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -A FORWARD -i eth1 -j ACCEPT

当我输入它时,root我得到了想要的结果。此外,我不明白这里发生了什么,(例如“我可以用 替换MASQUERADEPOOL_PARTY?” - 一个不自解释命令语法的很好例子!)这些字符串的主要问题是看起来像是相当低级的调整(存根以暂时实现所需的行为?)因为它不会在重启后继续存在。重启后:

  • lsmod | grep ip显示模块已加载
  • cat /proc/sys/net/ipv4/ip_forward印刷0
  • sudo iptables -S给出空的规则列表

我的意思是,在路由/防火墙 Linux 服务器上,这种任务通常是如何完成的?有没有其他方式来配置它?

答案1

这些字符串看起来就像是相当低级的调整(存根以暂时实现所需的行为?),因为它在重启后无法继续存在。[…]
通常在路由/防火墙 Linux 服务器上如何完成此类任务?有没有其他方式来配置它?

更高级别是拥有一个防火墙软件(例如shorewallufw),它将根据其配置在每次启动时设置数据包过滤规则。

如果您知道如何在启动时运行任何命令(/etc/rc.local这是最基本的方法,不一定是最好的方法),您可以通过iptables这种方式运行命令。这就像穷人的解决方案。

此外还请参见man 8 iptables-saveman 8 iptables-restore

永久更改的一个基本方法/proc/sys/net/ipv4/ip_forward是编辑/etc/sysctl.conf。您甚至可以在文件中包含以下几行:

# Uncomment the next line to enable packet forwarding for IPv4
#net.ipv4.ip_forward=1

不过,如果您使用的防火墙足够智能,可以在需要时自行更改设置,当防火墙正常工作时,您可能不需要编辑该文件。我无法确定哪些防火墙会这样做(如果有的话),但一般来说这是可能的。


不自解释命令语法的一个很好的例子

为什么它应该是自我解释的?我们有man其他资源。man 8 iptables会指出man 8 iptables-extensions这是相当巨大的。我敢说你发明了一种能够取代手册的自我解释语法。:)


我有一台 Debian 9 主机,有 2 个接口 [...] 可以像典型的家用路由器一样工作

我的设置完全一样。我没问题shorewall

相关内容