Chinaunix

标题: 新手求帮助 openbsd pf 方面 [打印本页]

作者: tzhxbg    时间: 2014-07-19 22:05
标题: 新手求帮助 openbsd pf 方面
本帖最后由 tzhxbg 于 2014-07-19 23:22 编辑

我有三台服务器(10.0.0.2  10.0.0.3 10.0.0.4) 和一个网关(10.0.0.1)一个外网ip(61.162.198.5)这三台服务器的网关必须用10.0.0.1 这样服务器才能用
现在的问题是我想让一台服务器 10.0.0.4 用后来这个加的这个光纤(外网ip 61.162.198.5)能访问   。。。。
我能再加一台服务器10.0.0.5用 openbsd+pf实现吗?怎么实现?
作者: 小蜜蜂王    时间: 2014-07-19 22:40
http://www.openbsd.org/faq/pf/rdr.html
作者: tzhxbg    时间: 2014-07-19 23:23
有中文的吗?回复 2# 小蜜蜂王


    直接给我说规则也行
作者: congli    时间: 2014-07-21 08:42
内网机器想直接用外网IP访问,rdr重定向, 将需要的端口重定向到内网IP上面
作者: lsstarboy    时间: 2014-07-21 08:45
不懂pf,但是ipfw我倒知道,可以用楼上的端口映射,也可以用整个IP的映射。
作者: tzhxbg    时间: 2014-07-21 15:20
直接在pf.conf 里加入pass in on em0 proto tcp from any to any port 80 rdr-to 10.0.0.6  是不是 em0的10.0.0.6 能被em1 连接的外网访问
作者: vity    时间: 2014-07-21 16:40
你的问题写得不清晰,应该整理一下思路先。把电脑都编上编号,把网卡也编上编号,有助于问题解决。

我看你的配置:3台服务器,1台主机(双网卡作为路由器),是吗?

3 台服务器是内网的,你想让外网访问这 3 台服务器中的一台,是这样吗?

pf 规则应该设置在路由器上。
作者: tzhxbg    时间: 2014-07-21 19:03
三台服务器(w1 w2 w3) 一台网关(g1) 还有一台双网卡的服务器(n1)做pf   w1 w2 w3 这三台服务器的网关必须设为g1   我想用n1把 w3映射出去 w3的网关不能改成n1 改了w3就不能连接 w1 w2 啦 能把w3映射出去同时 w3还能连接 w1 和 w2 吗 ?
作者: vity    时间: 2014-07-21 22:21
本帖最后由 vity 于 2014-07-21 22:22 编辑

网络拓扑情况还是不清楚呀,一般网关 g1 都是双网卡呀。

总之,现在 n1 能访问 10.0.0.6 的 80 端口吗?如果可以的话,就在 n1 上添加 rdr-to 规则:
pass in on em0 proto tcp from any to any port 80 rdr-to 10.0.0.6
将 em0 替换为外网的网卡名称,不能写为内网的网卡名称。
作者: lsstarboy    时间: 2014-07-22 08:50
回复 8# tzhxbg


    w3不把n1设置为网关,端口映射的方式无效,但是如果是web应用的话,nginx倒可以,做反向代理就行;ssh通过隧道也可以做。

原理上说,在n1的内网卡口上做反向的NAT也可以,但是我一直没试验成功过。
作者: vity    时间: 2014-07-22 09:24
典型的网络应该是下图的样子:

w1,w2,w3,g1,n1 的 eth0 都在一个子网中,n1 是网关,这样的话,在 n1 上配置 nat-to 和 rdr-to 即可,给出参考:
pass out on eth1 from eth0:network to any nat-to (eth1)
pass in on eth1 from any to any port 80 rdr-to 10.0.0.6

如果网络是下图的样子,其中有两个网关,g1 和 n1,就不能采用上述方法了。


其实,它的原理就是,内网主机没有公用 ip,所以外网 ip 不用直接访问内网的计算机,而内网的计算机披着网关的皮(借用网关的那个外网网卡的 ip)才得以访问外网,这就是 nat-to 规则的用途。
让网关登记一个端口,特别用于映射内网的指定主机的指定端口,当外网计算机访问网关的那个端口时,网关将请求转发给指定的主机的指定端口处理,,实现了内网主机协助网关处理数据的功能,这就是 rdr-to 规则的用途。又因为内网返回数据时利用 NAT 又披上了皮,所以外网的计算机只能看到它和网关的通信,并不知道网关让网关内部的计算机代理了通信。

如果要实现真正的外网和内网直接通信,需要开辟一条专用通道,叫 tunnel,请查看 ssh 相关手册中的 隧道 问题。




欢迎光临 Chinaunix (http://bbs.chinaunix.net/) Powered by Discuz! X3.2