使用iptables和dhcpd进行端口转发

设置:我有一个Linux(Gentoo,如果这有所作为)框,作为整个公寓的门户。 这个盒子用iptables和dhcpd做NAT-magic。

问题:我有一台特定的计算机,我想要一个端口转发(对于山洪,如果再次,有一个区别)。

我刚刚有足够的Linuxpipe理技能来阅读howtos并最终configuration正确的东西,但是我发现我的案例的howtos太不清楚,似乎是不必要的复杂。

对于我所收集到的,我的问题是双重的:让dhcpd可靠地为我想要的计算机分配一定的静态IP,然后为端口转发configurationiptables。

有人能给我一个明确的,一步一步的指导如何做到这一点? 我相信我不是唯一想要这样做的人


编辑:我的版本的软件是:

 #iptables --version
 iptables v1.4.0

 #dhcpd --version
 ISC-的dhcpd-V3.1.1-的Gentoo

为了使dhcp可靠地分配一个特定的静态IP给你想要的计算机,通常要做的是查看如何告诉你的dhcp服务器(无论你正在运行哪个服务器),把一个mac地址静态映射到一个IP地址。 这将使它总是把相同的IP(你指定的)分发给那个mac地址。

ISC dhcp需要一个configuration节

host mycomputer { hardware ethernet 00:12:34:56:78:9A; fixed-address 192.168.1.10; } 

dnsmasq需要一行:

 dhcp-host=00:12:34:56:78:9A,192.168.1.10 

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

哪里:

  • 我的电脑是你电脑的主机名
  • 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} 

哪里:

  • 内部networking是代表你的networking的IP地址,即192.168.1.0
  • 内部地址是代表您要公开的主机的IP地址,即192.168.1.10
  • public-address是面向您的ISP的接口的IP地址
  • 如果你的内部计算机能看到它,那么port-on-public-address是stream量到达的端口号; 注意这个规则在转发时不会改变端口号,它只是传递数据包

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

iptables -t nat -I PREROUTING -s ! {internal-network} -d {public-address} -p tcp --dport {port-on-public-address} -j DNAT --to-dest {internal-address}

哪里:

  • 内部networking是代表你的networking的IP地址,即192.168.1.0
  • internal-address是表示要公开的主机的IP地址,即192.168.1.2
  • public-address是面向您的ISP的接口的IP地址
  • 如果你的内部计算机能看到它,那么port-on-public-address是stream量到达的端口号; 注意这个规则在转发时不会改变端口号,它只是传递数据包

请注意-s,exclaimation标记和{internal-network}之间的空格, 确保两侧都有空格。