![为同一 Ubuntu 服务器上的多个 IP 地址转发端口 80](https://linux22.com/image/965712/%E4%B8%BA%E5%90%8C%E4%B8%80%20Ubuntu%20%E6%9C%8D%E5%8A%A1%E5%99%A8%E4%B8%8A%E7%9A%84%E5%A4%9A%E4%B8%AA%20IP%20%E5%9C%B0%E5%9D%80%E8%BD%AC%E5%8F%91%E7%AB%AF%E5%8F%A3%2080.png)
我正在使用 Ubuntu 12.10 服务器作为内部网络到互联网的路由器/NAT。我还配置了服务器以将端口 80 转发到位于内部网络上的服务器。一切正常。
我现在想做的是使用网络上的端口 80 设置其他端口转发器以添加 Web 服务器。我还有其他几个静态互联网地址可以供外部使用,只需设置转发到本地服务器即可。
我知道我可以创建额外的 Ubuntu 服务器,为每个服务器配置不同的互联网地址(以及第二个 NIC 上的本地地址)并设置端口转发。
使用单个 Ubuntu 服务器可以实现这个功能吗?
我尝试向我的单个 Ubuntu 服务器添加更多虚拟 NIC,但遇到了路由问题,因为所有这些额外的 NIC 都在同一个互联网子网上。
为每个端口转发设置单独的 ubuntu 服务器是我希望实现这一目标的唯一方法吗?
答案1
您所要求的操作在 NAT 中是无法实现的(据我所知)。iptables 根本无法知道将哪些流量发送到哪里,而且您只能对 80 号端口的一个实例进行端口转发。
我认为更优雅的解决方案是使用 nginx 作为反向代理。
看:
https://help.ubuntu.com/community/Nginx/ReverseProxy
http://bostinno.com/channels/nginx-as-a-reverse-proxy-with-wordpress/
它运行良好,因为 nginx 速度快、重量轻,并且您可以根据 url 转发到各个服务器;)
Nginx 以非常快的速度提供静态内容,而 apache 以非常快的速度提供动态内容(通常是 php)(参见第二个链接)。
答案2
如果您有特定内部 http 服务器的特定外部 IP,则可以使用 iptables 进行 NAT 到正确的 IP,就像这样。
假设你有一个内部 http 服务器,其 IP 为 10.10.10.2、10.10.10.3 和 10.10.10.4,每次外部 IP 50.35.100.10 调用端口 80 时,你都希望它转到 10.10.10.2 服务器,因此你可以使用如下 DNAT 规则
iptables -t nat -A PREROUTING -i eth0 -s 50.35.100.10 -p tcp --dport 80 -j DNAT --to 10.10.10.2
而其他的规则也一样。现在如果你没有这样的规范,就像bodhi.zazen之前说的,没有办法只用iptables来做。