Mik*_*kov 7 iptables openwrt nat
我使用来自 OpenWRT 的自动生成规则作为 NAT 反射(NAT 环回)的示例。
所以让我们假设有一个网络 192.168.1.0/24 有两个主机(+ 路由器):192.168.1.100 和 192.168.1.200。路由器有两个接口 LAN(br-lan)和 WAN(eth0)。LAN 接口的 IP 为 192.168.1.1,WAN 接口的 IP 为 82.120.11.22(公共)。192.168.1.200 上有一个 www 服务器。我们想使用公共 IP 地址从 192.168.1.100 连接到 Web 服务器。
如果您想重定向 WAN->LAN 以便互联网上的人可以访问 Web 服务器,您可以将以下规则添加到 iptables:
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
iptables -t nat -A PREROUTING -i eth0 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.200:80
Run Code Online (Sandbox Code Playgroud)
我知道规则是什么意思。但是还有另外两条规则负责 NAT 反射。其中之一对我来说不像上面的那么清楚。所以第一条规则是这样的:
iptables -t nat -A PREROUTING -i br-lan -s 192.168.1.0/24 -d 82.120.11.22/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.200
Run Code Online (Sandbox Code Playgroud)
这意味着所有从 192.168.1.0/24 网络到公共 IP 到端口 80 的流量都应该发送到本地 Web 服务器,这意味着我在 firefox 中键入公共 IP,我应该得到服务器返回的页面,对吗?表中的所有其他转发魔法filter
都已经完成,但我仍然无法使用公共 IP 连接到 Web 服务器。数据包符合规则,但没有任何反应。
我们需要另一个nat
规则来使整个机制工作:
iptables -t nat -A POSTROUTING -o br-lan -s 192.168.1.0/24 -d 192.168.1.200/32 -p tcp -m tcp --dport 80 -j SNAT --to-source 192.168.1.1
Run Code Online (Sandbox Code Playgroud)
我不知道为什么需要规则。谁能解释一下这条规则到底是做什么的?
plu*_*ash 19
为了使 NAT 正常工作,从客户端到服务器的数据包和从服务器到客户端的数据包都必须通过 NAT。
请注意,iptables 中的 NAT 表仅用于连接的第一个数据包。与连接相关的后续数据包使用在转换第一个数据包时建立的内部映射表进行处理。
iptables -t nat -A PREROUTING -i br-lan -s 192.168.1.0/24 -d 82.120.11.22/32 -p tcp -m tcp --dport 80 -j DNAT --to-destination 192.168.1.200
Run Code Online (Sandbox Code Playgroud)
有了这条规则,就会发生以下情况。
iptables -t nat -A POSTROUTING -o br-lan -s 192.168.1.0/24 -d 192.168.1.200/32 -p tcp -m tcp --dport 80 -j SNAT --to-source 192.168.1.1
Run Code Online (Sandbox Code Playgroud)
一旦我们添加了这个规则,事件的顺序就会改变。
归档时间: |
|
查看次数: |
18827 次 |
最近记录: |