CentOS 7 NAT 路由和 IPTABLES

CentOS 7 NAT 路由和 IPTABLES

我有 CentOS 实例,就像本地网络的 NAT。本地网络中有一些子网。其中一个子网内有一个 PPTP VPN 服务器。我需要将此服务器发布到 Internet。

所以。我的问题是流量无法从一条nat/PREROUTING链传递到另一条filter/FORWARD链。

  • 1.1.1.1我的外部 IP 是
  • 192.168.10.1是我的内部IP
  • 10.0.1.1是 VPN 服务器 IP
  • eth0是外部接口
  • eth1是内部接口

NAT 规则(它起作用了,PKTS而且BYTES发生了改变)

-A PREROUTING -d 1.1.1.1/32 -i eth0 -p tcp -m tcp --dport 1723 -j DNAT --to-destination 10.0.1.1
-A PREROUTING -d 1.1.1.1/32 -i eth0 -p gre -j DNAT --to-destination 10.0.1.1

FILTER 规则(它不起作用。PKTS并且BYTES没有改变)

-A FORWARD -d 10.0.1.1/32 -i eth0 -o eth1 -p tcp -m tcp --dport 1723 -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.0.1.1/32 -i eth1 -o eth0 -p tcp -m tcp --sport 1723 -m state --state RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -d 10.0.1.1/32 -i eth0 -o eth1 -p gre -m state --state NEW,RELATED,ESTABLISHED -j ACCEPT
-A FORWARD -s 10.0.1.1/32 -i eth1 -o eth0 -p gre -m state --state RELATED,ESTABLISHED -j ACCEPT

当然,net.ipv4.ip_forward = 1我可以10.0.1.1从 NAT 服务器 ping 通。

端口tcpdump1723 上仅显示外部接口上的操作。

我不知道。

UPD1。我用检查了路由ip route get 10.0.1.1 from <src> iif eth0,得到了RTNETLINK answers: Invalid argument。顺便说一句,我得到了一些答案,然后我使用了任何名称iifeth0,,)。我得到了有效的路线,然后没有使用参数。eth1eth2iif

UPD2。我首先将-A FORWARD -d 10.0.1.1/32 -j ACCEPT规则添加到filter/FORWARD链中。但什么也没有。数据包和字节为零。

答案1

  • 其他规则非常重要。规则的顺序也很重要。因此,请检查命令的输出iptables-save -c。调查您创建的规则之上的规则。

  • nat/PREROUTING在和链之间filter/FORWARD做出路由决策。使用检查路由ip route get 10.0.1.1 from <src> iif eth0。它应该返回有效路由。如果是其他内容,请将其粘贴到问题中。

  • 还调查命令的输出nstat -az

  • 要通过 NAT 传递 pptp,您需要加载 conntrack 模块:

    • nf_conntrack_proto_gre
    • nf_nat_proto_gre
    • nf_conntrack_pptp
    • nf_nat_pptp
  • 在最近的内核中,您应该明确启用 conntrack 助手,尤其是对于 pptp。因此您需要添加附加规则。

iptables -t raw -A PREROUTING -p tcp -m tcp --dport 1723 -j CT --helper pptp
  • 启用帮助程序的另一种方法是 sysctl 命令:
sysctl -w net.netfilter.nf_conntrack_helper=1
  • 解决问题的其他工具:
    • conntrack -E- conntrack 事件监控
    • tcpdump
    • -j NFLOGtcpdump -ni nflog- 允许从 iptables 规则捕获数据包。
    • -j TRACE目标 - 您可以通过防火墙规则调查数据包的路径。

附言如果您仍然遇到困难,请更新问题。

相关内容