利用ISP提供的多个IP

这有点复杂,所以忍受着我。 我有一个相当不错的IP工作知识,但我正在寻求帮助实现这个最好的方式。

我的ISP给了我一个静态的IP块,以及一个IP。 为了隐私的缘故,这里是我将在我的例子中使用的networking布局:

  • 192.168.1.0/24 – 局域网
  • 172.16.0.1/30 – 单个静态IP,默认为gw 172.16.0.2
  • 172.16.1.1-5 / 28 – 静态IP的范围,默认gw 172.16.1.6

在这些例子中,172.16.0.1和172.16.1.1-5实际上是世界可路由的互联网IP。 为了隐私,我使用私有IP块。 所以假设172.16.0.1是你想要的公有IP,172.16.1.1块也是一样的。

我的服务是通过单个电缆调制解调器接口和一个以太网端口提供的。 换句话说,所有的交换,路由等预计将在客户端完成。

我目前有一个有两个以太网接口的Linux服务器。 它被分配了172.16.0.1静态并且使用NAT为LAN接口提供互联网,完美地运作。 我已经使用这个设置多年来为我提供了一个NAT路由器,我比现有的路由器有更深的控制权。

现在,我想开始利用我拥有的其他静态IP。 渔获是这些:

  1. 我仍然希望至less在某种程度上能够控制对这些盒子的访问。 所以,在Linux的主箱子里,我想能够说“172.16.1.1不能接收除80端口以外的任何input连接”或“172.16.1.2无法连接到除22端口之外的任何东西”。 只是一些例子。 换句话说,我仍然希望防火墙控制这些盒子。 类似于我现在可以使用iptables阻止192.168.1.5从任何地方去除了我想要的地方,在这种情况下,也计算入站连接。 理想情况下,这意味着我可以将所有数据包发送到通过iptables路由的五个公共静态数据之一,并且具有与LAN数据包相同的控制级别。

  2. 局域网上的计算机(192.168.1.0/24)也可能需要访问这些面向公众的机器。 另外, 公共IPS上的计算机可能需要访问LAN计算机。 所以,172.16.1.2可能需要访问192.168.1.5,反之亦然。

  3. 拥有静态世界可路由IP的计算机应尽可能自我意识到其面向公众的IP。 我看到的一个build议是build议在局域网上播放公用计算机,给他们局域网地址,然后在Linux机器上使用多宿主,并将所有端口从所需的静态转发到所需的局域网IP。 这确实有用,但是会造成一些混乱的情况–Linux框现在需要知道每一个静态IP ,因此这不能很好地扩展。 因此,例如“eth1”(WAN接口)不仅需要它已经使用的IP,还需要所有其他五个IP。 这可能是罚款五,但如何在未来可扩展性有2000 IP …

我想到的一个想法是向Linux路由器添加第三个接口,并build立一个只包含面向公众的机器的小型networking。 唯一的问题就是这些机器和Internet之间的路由。 最重要的是,我可以用这种方法简单地完成这个任务,就是在eth2上为Linux发送第二个IP地址,这个IP地址会占用这五个宝贵的静态数据中的一个。

我不想使用任何商业解决scheme来实现这一点。 我觉得Linux应该能够处理这种情况。

布局 这是我希望能够工作的布局,但我只需要弄清楚如何在Linux上进行路由本身。

如果像上面那样添加第三个接口来构buildDMZ,则路由将变得非常简单。 实际上,所有你需要做的就是启用IP转发,它将在连接的接口之间转发数据包。

sysctl -w net.ipv4.ip_forward=1

要么

echo 1 > /proc/sys/net/ipv4/ip_forward

使其能够实时运行

或设置

/etc/sysctl.conf net.ipv4.ip_forward=1

然后,你只需要防火墙规则来控制从DMZ访问Lan电脑,你仍然可以利用从Wan接口到LAN接口的NAT,你将依靠Routing +访问规则来控制从WAN到DMZ和DMZ局域网。 DMZ和LAN的默认网关是同一个盒子,您不必在DMZ或LAN计算机上的静态路由上进行中继。 另一个select是在每个DMZ主机中放置2个以太网卡,并将它们连接到局域网上,但这不像使用中间的路由器和访问列表(iptables)来指示什么可以与什么交谈。

你想要的function是“networking别名”,我想。 那么你需要做的是为这些networking别名configuration“多重NAT”。

我不知道你在你的路由器linux上实际运行的是什么,但是如果我能提出一个解决scheme,只需安装具有很多function的“pfSense”( http://www.pfsense.org/index.php@option= com_content&task = view&id = 40&Itemid = 43.html )或IPCop( http://www.ipcop.org/ ),那么pipe理起来就容易多了,因为它是一个graphics解决scheme。

这与您的使用情况完全相符:

而且,它运行在真正的旧硬件上。

我终于明白了这一点,为了所有人的利益,这里值得写一下。

我将得到一个有三个以太网接口的盒子。 以下是我们如何连线:

  • eth0 – >到电缆调制解调器
  • eth1 – >到具有公用WAN地址的计算机所在的交换机
  • eth2 – >到LAN(NAT)计算机的交换机

我们使用bridge-utils(brctl)br0build立一个桥接eth0和eth1的Linux网桥。

然后我们可以给br0接口一个面向公众的IP地址。 这将最终成为来自LAN计算机的数据包的来源。 为了最好的安全性,我将使用iptables阻止所有非NATstream量到这个IP:

 iptables -A INPUT d 172.16.0.1 -j DROP 

这是可行的,因为NATstream量将在FORWARD链上传递,而未经请求的Internetstream量将出现在INPUT上。

现在,在广域网交换机上,我可以放置其他主机。 我将把我的主服务器 – networking服务器等等移动到那个交换机上,并静态分配一个全球可路由的公共IP地址。

我之前并不清楚的真正原因是我没有想到我可以在一个网桥接口上防火墙 – 我没有意识到网桥的数据包​​确实通过了iptables。 原来,我不仅可以这样做,但我甚至可以使用像ulogd和类似的工具来做带宽监视等等。 关键是一个叫做physdev的iptables模块,它可以让你根据数据包进入或离开哪个物理接口的防火墙,而不pipe接口的桥接性如何。

所以我可以将防火墙规则添加到FORWARD表中,例如:

 iptables -A FORWARD -d 172.16.1.2 -p tcp --dport 80 -m physdev --physdev-in eth0 -j ACCEPT iptables -A FORWARD -d 172.16.1.2 -m physdev --physdev-in eth0 -j DROP 

这最终只允许来自因特网的端口80stream量到达172.16.1.2,即使该机器具有公共IP。 (请记住,在我的例子中,172.16.xx是公开的,即使我们都知道实际上他们不是。)

由于我正在使用physdev ,这意味着LAN端的机器仍然可以完全访问该主机。 所以从LAN端来说,我仍然可以SSH到172.16.0.1。 从LAN机的angular度来看,172.16.0.1根本就没有防火墙。 从另一个DMZ机器的angular度来看,同样的事情。 但是,从互联网的angular度来看,172.16.0.1被locking了。

find解决scheme 这已经变成一个非常有趣的项目。

F