使用 iptables 和 dhcpd 进行端口转发

Hen*_*aul 1 dhcp linux iptables port-forwarding

设置:我有一个 Linux(Gentoo,如果有区别的话)盒子,作为整个公寓的网关。这个盒子用 iptables 和 dhcpd 做它的 NAT-magic。

问题:我有一台计算机,我想将端口转发到(对于种子,如果再次存在差异)。

我有足够的 Linux 管理技能来阅读 howtos 并正确配置东西(最终),但我为我的案例找到的 howtos 太不清楚,似乎不必要地复杂。

对于我收集到的内容,我的问题是双重的:让 dhcpd 可靠地将某个静态 IP 分配给我想要的计算机,然后为端口转发配置 iptables。

有人可以给我一个明确的分步指南如何做到这一点吗?我敢肯定,我不是唯一一个想做这件事的人……


编辑:我的软件版本是:

# iptables --version
iptables v1.4.0

# dhcpd --version
isc-dhcpd-V3.1.1-Gentoo

pjz*_*pjz 6

为了让 dhcp 可靠地将某个静态 IP 分配给您想要的计算机,通常要做的是研究如何告诉您的 dhcp 服务器(无论您正在运行哪个服务器)将 mac 地址静态映射到 IP 地址。这将使它始终向该 mac 地址分发相同的 IP(您指定的)。

ISC dhcp 需要像这样的配置节

host mycomputer {
  hardware ethernet 00:12:34:56:78:9A;
  fixed-address 192.168.1.10;
}
Run Code Online (Sandbox Code Playgroud)

dnsmasq 需要这样一行:

dhcp-host=00:12:34:56:78:9A,192.168.1.10
Run Code Online (Sandbox Code Playgroud)

其详细信息在联机帮助页中指定。

在哪里:

  • mycomputer是您计算机的主机名
  • 00:12:34:56:78:9A是你电​​脑的mac地址
  • 192.168.1.10是您希望始终分配给该 mac 地址的 IP

完成后,您现在有一个“静态”IP 来进行端口转发。要做到这一点,正如@Avery Payne 所说,你想这样做:

iptables -t nat -I PREROUTING -s ! {internal-network} -d {public-address} -p tcp --dport {port-on-public-address} -j DNAT --to-dest {internal-address}
Run Code Online (Sandbox Code Playgroud)

在哪里:

  • internal-network是代表您网络的 IP 地址,即 192.168.1.0
  • internal-address是代表要公开的主机的IP地址,即192.168.1.10
  • public-address是面向您的 ISP 的接口的 IP 地址
  • port-on-public-address是如果您的内部计算机可以看到流量将到达的端口号;请注意,此规则在转发时不会更改端口号,它只是将数据包传递

注意 -s、感叹号和 {internal-network} 之间的空格,确保两边都有空格。