V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
Distributions
Ubuntu
Fedora
CentOS
中文资源站
网易开源镜像站
caizixian
V2EX  ›  Linux

利用 iptables 的 NAT 进行的端口转发突然失效

  •  
  •   caizixian ·
    caizixian · 2015-03-17 19:20:36 +08:00 · 5739 次点击
    这是一个创建于 3539 天前的主题,其中的信息可能已经有所发展或是发生改变。

    一台Ubuntu Server 12.04 x86

    原先利用iptables的NAT把8080转发到本机的80,把8888转发到22(不要问为什么)。

    iptables -t nat -I PREROUTING -p tcp --dport 8888 -j REDIRECT --to-ports 22
    iptables -t nat -I PREROUTING -p udp --dport 8888 -j REDIRECT --to-ports 22
    iptables -t nat -I PREROUTING -p tcp --dport 8080 -j REDIRECT --to-ports 80
    iptables -t nat -I PREROUTING -p udp --dport 8080 -j REDIRECT --to-ports 80

    结果今天在别处通过8888接不上SSH了,但是通过8080还是可以访问到上面跑着的Apache。

    于是直接跑到服务器那里,物理登录,发现ssh 127.0.0.1可以连接,而ssh 127.0.0.1:8888无法连接。

    感觉特别奇怪。因为已经正常工作了2年了。通过iptables -L -t nat发现规则依然存在。ufw status发现也都allow那些端口了(连127.0.0.1都连不上应该跟Firewall没关系)。netstat看了,端口没有被别的程序占用。

    这究竟是什么情况,求支招。

    4 条回复    2015-03-18 16:15:16 +08:00
    ForgotFun
        1
    ForgotFun  
       2015-03-17 22:50:11 +08:00
    1."结果今天在别处通过8888接不上SSH了"的问题,其实应该是你网络封锁了对应的端口或者ssh协议.

    2.ssh 127.0.0.1:8888 当然是不能访问的,你上面的规则只是针对通过NAT的流量. REDIRECT 本质上一个DNAT规则. 所以你这样就理解为啥127.0.0.1:8888 不能访问.
    ryd994
        2
    ryd994  
       2015-03-17 23:31:15 +08:00 via Android
    连不上是reset还是timeout?
    你sshd还健在么?
    extreme
        3
    extreme  
       2015-03-18 00:23:54 +08:00
    你的规则是针对入路由的数据包的,很明显127.0.0.1不会经过预路由。
    只有外部到你的主机的数据包才会经过预路由的链。
    针对内部的NAT规则,应该插入到OUTPUT链中。
    caizixian
        4
    caizixian  
    OP
       2015-03-18 16:15:16 +08:00
    问题已经解决

    @ForgotFun
    @extreme 正解

    @ryd994 当时22可以连上
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   2808 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 23ms · UTC 14:03 · PVG 22:03 · LAX 06:03 · JFK 09:03
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.