And*_*dre 3 iptables port-forwarding
我试图让端口转发在一台机器上工作。我在这里阅读了许多有关该问题的主题,但我无法让它发挥作用。计划是将端口 5000 上 ppp0 上的所有传入流量转发到 eth0 上的设备。以下是我尝试过的规则(从该网站收集):
iptables -t nat -A PREROUTING -p tcp -i ppp0 --dport 5000 -j DNAT --to-destination 192.168.5.242:5000
iptables -A FORWARD -p tcp -d 192.168.5.242 --dport 5000 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
iptables -t nat -A POSTROUTING -j MASQUERADE -o ppp0
Run Code Online (Sandbox Code Playgroud)
那行不通。接下来的尝试是这样的:
iptables -A PREROUTING -t nat -i ppp0 -p tcp --dport 5000 -j DNAT --to 192.168.5.242:5000
iptables -A INPUT -p tcp -m state --state NEW --dport 5000 -i ppp0 -j ACCEPT
iptables -t nat -A POSTROUTING -j MASQUERADE -o ppp0
Run Code Online (Sandbox Code Playgroud)
当在该端口上访问该计算机时,如果没有这些规则,我会收到连接被拒绝的消息,并且在有规则的情况下会出现连接超时。所以有些东西正在发挥作用,但不是以预期的方式进行。
我怎样才能检查我做错了什么?
您需要将 FORWARD 规则与 PREROUTING 一起使用。原因是对目标 IP 的更改是在应用 FILTER 表中的任何规则之前进行的 - 检查此图以了解不同 iptables 表的规则应用于数据包的顺序。
因此,您需要在 NAT 的传入和转发过程中使用 NAT。出路时的重新翻译(如果在寻址 ppp0:5000 时从外部初始化连接)将由 DNAT 规则处理。
iptables -A PREROUTING -t nat -i ppp0 -p tcp --dport 5000 -j DNAT --to 192.168.5.242:5000
iptables -A FORWARD -p tcp -d 192.168.5.242 --dport 5000 -m state --state NEW,ESTABLISHED,RELATED -j ACCEPT
Run Code Online (Sandbox Code Playgroud)
您还需要激活IP转发本身;如果您只想暂时(直到下一次系统关闭),您可以选择
echo 1 > /proc/sys/net/ipv4/ip_forward
Run Code Online (Sandbox Code Playgroud)
如果要永久激活端口转发,则需要更改该文件/etc/sysctl.conf
,将 的值更改net.ipv4.ip_forward
为1
。
如果您还想在出路时使用 NAT,以便您的专用网络内的计算机可以访问外部世界,您可以使用
iptables -t nat -A POSTROUTING -j MASQUERADE -o ppp0
Run Code Online (Sandbox Code Playgroud)
注意:您不需要为此设置 FORWARDING 规则。
要查看哪个表保存哪些规则,您可以使用
iptables -t [table] -S
Run Code Online (Sandbox Code Playgroud)
对于 [table] 规则的非结构化视图(FILTER NAT MANGLE 是 iptables 的表;如果您想要 FILTER,则不需要,-t FILTER
因为 FILTER 是 iptables 的所有调用都会评估的默认表),或者
iptables -t [table] -L
Run Code Online (Sandbox Code Playgroud)
查看分成表链的规则。
查看手册页,了解 iptables 的真正详细信息 -如果您想深入了解,请花很多时间:)
归档时间: |
|
查看次数: |
54539 次 |
最近记录: |