我试图将流量从一台服务器转发到另一台服务器,同时保持原始请求者IP。因此,我不能使用SNAT或伪装。
服务器A:
公共知识产权: 111.111.111.111
私人知识产权: 10.0.0.1
服务器B:
公众IP: 222.222.222.222
私人知识产权: 10.0.0.2
我想将流量fr n服务器A (111.111.111.111)转发给服务器B (10.0.0.2)。
这样做很好:
iptables -t nat -A PREROUTING -d 111.111.111.111 -p tcp --dport 80 -j DNAT --to-destination 10.0.0.2:80
iptables -t nat -A POSTROUTING -j MASQUERADE但是,由于在本例中我使用的是伪装,目标服务器(10.0.0.2)会看到从111.111.111.111开始的所有通信量,即apache-日志和其他文件在从111.111.111.111开始时显示所有请求。
我如何设置它而不是这样,以便原始源IP地址被保留,就像家庭路由器在使用端口转发时所做的那样。
我假设我需要以某种方式设置一条“路由”,这样10.0.0.2的传出流量就会通过服务器A而不是试图响应服务器B的公共IP?
发布于 2013-07-18 10:06:58
你似乎对人际关系感到困惑。
你在NAT级别想要的根本就没有意义。
必须在Layer3网络数据包中重写地址,才能使NAT工作。
私有IP空间首先是不可路由的(在互联网上,intrAnets的行为可能有所不同)。
您希望看到原始ip地址的位置位于第4层:应用层。(原木等)那里的信息根本不受NAT的影响。您可能会看到NAT路由器的ip地址,但是Apache日志仍然应该指示NAT后面的机器/主机名/用户根据HTPP报头信息请求信息。
你把不相关的事情混在一起。
发布于 2014-07-11 00:10:57
Iptables是很棒的,但是如果您将所有东西都保存在nginx中,那么它就可以完成它设计的工作。使用iptables可以使用其他高级技巧,如日志记录和数据包标记,但如果您没有理由在nginx之外执行此操作,则应该使用nginx。这样,如果您移动到另一个系统,如(Ugly)windows服务器或FreeBSD,那么配置将在nginx中完成,而不是在依赖于系统的级别上完成。如果您担心速度,这就是nginx设计的目的,所以如果您使用一些预先制作的或开发您自己的日志监视器,那么在您使用的每个系统上都是一样的。Linux很棒,不应该有理由放弃它,但是如果您必须用其他环境实现更多的服务器,那么您所有的信任都是独立于环境的。
https://serverfault.com/questions/524338
复制相似问题