我无法在 WAN 上提供端口 80,我不知道为什么。
我的设置只是我的家庭网络充当广域网,我的“实验室”充当局域网。 WAN 192.168.0.0/24,LAN 192.168.5.0/24。路由器 wan 接口是 192.168.0.113,lan 接口是 192.168.5.1。 Web 服务器位于 192.168.5.17,我尝试转发 192.168.0.133 上的端口 80。使其在广域网上可用。我把当前版本的规则和 pf 日志放在下面。在我看来,它只是没有重定向流量,我不知道为什么。感谢任何帮助,如果您需要更多信息,我很乐意提供。谢谢!
哦,ssh 规则工作得很好,我猜 b/c 它只是使用 wan 接口,不会重定向到另一台机器。
另外,我还尝试了使用和不使用端口 80 rdr-to 192.168.5.17 的最后一条规则,并且得到了相同的错误
我试图包含 pflog 信息,但堆栈交换说它是垃圾邮件......
#no need to run rules on the loop back int
set skip on lo
#macro to set the external int to em0
ext_if = "em0"
#macro to set the internal int to the other eth int
int_if = "re0"
#macro for the webserver
web_server = "192.168.5.17"
#making table for people that we want to block
table <badguys> persist file "/etc/badguys"
block quick from <badguys>
#naming specific trusted IPs
trusted = "{ 192.168.0.155 }"
#blocking all inbound and outbound ip6 traffic
block inet6
#default policy, remember pf is a last match application unless you use quick
block all
#this is for passing and taging all internal traffic
pass in on $int_if tag ALLOWED
#perform NAT
match out on $ext_if inet from ($int_if:network) to any nat-to ($ext_if)
#pass out all of the packets that were tagged
pass out on $ext_if tagged ALLOWED
#allows traffic out from the host
pass out from { ($ext_if),$int_if }
#rule to let in ssh
pass in on $ext_if proto tcp from {192.168.0.0/24 $trusted} to {192.168.0.113} port 22 flags S/SA keep state \
(max-src-conn 5, max-src-conn-rate 5/5, \
overload <badguys> flush global)
#trying to forward http
pass log on $int_if from 192.168.5.17 to any binat-to 192.168.0.113
pass in log on $ext_if proto tcp from any to 192.168.0.113 port 80 rdr-to 192.168.5.17
答案1
你不需要binat
规则。
pass in on $ext_if proto tcp to $(ext_if) port 80 rdr-to 192.168.5.17
pass out on $int_if proto tcp to 192.168.5.17 port 80
应该足够了。请注意,最后一条规则不包括在内
pass out from { ($ext_if),$int_if }
因为重定向的包既不是来自 的$ext_if
IP 地址,也不是来自$int_if
.
由于您或多或少可以控制主机上发生的情况,因此添加一个简单的pass out
规则(即仅过滤 WAN 和 LAN 上的传入流量)并删除所有其他pass out ...
规则可能会使事情变得更简单。
在外部和内部接口上使用tcpdump
来查看数据包(及其回复)是否实际转发和重定向/NAT 可能会有所帮助。我还建议在网络服务器上执行相同的操作。
另外,还要注意路由问题。确保网络服务器知道将其回复发送到哪里。在您的示例中,如果它知道 192.168.5.1 是发往 192.168.0.0/24 的数据包的网关(甚至是其默认网关)。