我希望我在正确的网站,因为这是我的第一个问题在这里!
所以这里是我的情况,我有一个小型服务器在家里后面的DSL线,我有一个静态IP。 现在我想有两个不同的服务在同一个端口上运行。 我无法应用任何types的源IP筛选,因为它们都应该可以从任何地方访问。 所以基本上我认为没有办法做到这一点,唯一的解决办法是在2个不同的IP地址上运行服务。
为了做到这一点,我正在考虑使用另一个DSL线路,显然我有第二个公共IP。 有没有什么办法来redirect到一个特定的端口到另一台机器的stream量,但在互联网上,而不是在LAN内???
当然,我只是希望用调制解调器/路由器来做这件事,而不需要任何额外的硬件(否则这太容易了,某种netcatpipe道系统,我们就去!!)。 对于那些有兴趣的路由器是Zyxel P-2602R-D1A( 链接文本 )
任何想法和build议欢迎!
谢谢
理论上,这将起作用。 您必须设置从额外的公共IP到原始IP的端口转发。 在你的情况下,extraIP:80到originalIP:81。
我有这样的设置与iptables。 它旨在简化在IP不同的公共IP范围之间的迁移。 基本上,“旧”的公共知识产权将被纳入“新”公共知识产权。 NAT通过互联网没有问题。
我怀疑它会与你调制解调器/路由器。 它很可能只能在局域网上做端口转发到IP。 唯一的办法就是尝试将任意随机公网IP进行NAT,然后你会看到它是否有效。
我已经尝试过与pfense这样做,并已失败。 只有IPTables正常工作。
您必须在路由器B上添加DNAT规则。这意味着路由器B必须支持DNAT,并且足够灵活以在同一接口上执行DNAT。 如果不尝试安装像OpenWrt这样的备用固件。
这是可能的,但棘手,我怀疑你的平均家庭路由器将有你需要做到这一点的灵活性。
在这篇文章的其余部分中,我将假设你的路由器是通用的linux系统。 这些原则可能适用于其他平台,但我不知道具体情况。
在iptables中使用“DNAT”规则来改变连接的目的地。 Iptables将很乐意将目的地改为任何你想要的。
当您的DNAT规则的目标位于执行DNAT的路由器后面的LAN上时,这非常有用。 DNAT更改connectoin的初始数据包上的目标,设置连接跟踪条目并将数据包传递到目标。 通过相同的路由器回复,匹配连接跟踪条目,得到反向翻译并发送回源。 源接受数据包并继续通信。
当您的DNAT规则的目标位于互联网上的某个不同的networking上时,它的效果并不好。 DNAT更改初始数据包的目的地,并将数据包传回ISP。
如果您的ISP正在遵循最佳实践,则他们的入口过滤会在此时丢弃数据包,但让我们假装它们不会。
数据包被传送到服务器,服务器对其进行答复并将答复发送给客户端。 不幸的是,答复数据包从来不会遇到实现DNAT的路由器,也不会被反向转换。 所以客户端得到一个包含一个意外的源地址的数据包,并立即将其放在地板上。
那么我们如何解决这个问题呢?
一种select是除了通过DNAT规则传递数据包之外,我们还通过SNAT / MASQUERADE规则传递数据包。 这将避免ISP入口过滤的问题,并将答复带回到NAT盒,因此可以应用反向翻译。 不幸的是,它也将隐藏客户端的IP从服务器滥用控制几乎是不可能的。
另一种select是将VPN与策略路由组合在一起。 而不是通过开放的互联网将数据包从NAT盒发送到服务器,而是通过VPN发送给他们。 然后在服务器上使用策略路由,这样当一个数据包进入时,VPN回复该数据包也通过VPN发送。
现在我想有两个不同的服务在同一个端口上运行
你不能这样做。 每个服务器程序都必须在自己的端口上进行监听(如果有两个程序试图打开相同的端口,则会遇到“无法绑定”或“端口正在使用”错误)。
如果您正在讨论托pipe两个不同的网站,那么通过基于名称的虚拟主机来完成。 也就是说,一个服务器在端口80上侦听,但是请求站点1和站点2去不同的地方。
除此之外,您将需要两个公共IP地址,否则您将需要使用不同的端口。
我确定你的ISP会很乐意把你的另一个IP地址卖给你。 你可能必须得到一个不同的DSL路由器(我不知道你是否知道如何处理多个公共IP),但是你不需要另一个DSL线路。