AskOverflow.Dev

AskOverflow.Dev Logo AskOverflow.Dev Logo

AskOverflow.Dev Navigation

  • 主页
  • 系统&网络
  • Ubuntu
  • Unix
  • DBA
  • Computer
  • Coding
  • LangChain

Mobile menu

Close
  • 主页
  • 系统&网络
    • 最新
    • 热门
    • 标签
  • Ubuntu
    • 最新
    • 热门
    • 标签
  • Unix
    • 最新
    • 标签
  • DBA
    • 最新
    • 标签
  • Computer
    • 最新
    • 标签
  • Coding
    • 最新
    • 标签
主页 / server / 问题 / 404516
Accepted
d_inevitable
d_inevitable
Asked: 2012-07-04 11:39:27 +0800 CST2012-07-04 11:39:27 +0800 CST 2012-07-04 11:39:27 +0800 CST

SSH 无法通过双 NAT 工作

  • 772

我正在尝试通过 2 个 NAT 为 ssh 设置端口转发

第一个路由器将我的互联网 IP 转换为我的外部网络 (10.1.7.0)。在外部网络中,有第二个路由器对我的内部网络 (192.168.1.0) 进行 NAT。

目标服务器连接到外部网络和内部网络。

我无法更改外部路由器的端口转发选项。当前配置为将 SSH 和 HTTP 端口转发到内部网络的路由器。

               Internet
                    +
                    |
                    v
            +-----------------+                      +------------------+
            |  Outer Router   |                      |   Inner Router   |
            |-----------------|                      |------------------|
            |                 |       SSH HTTP       |                  |
       +----+                 +--------------------->|                  |
       |    |                 |                      |                  |
       |    |                 |                      |                  |
       |    +-------+---------+                      +------+---------+-+
       |            |                                       |         |
       |            |                                       |         |
       |            |                                       |         |
       |            |           +------------------+        | SSH     |
       |            |           |   Server         |        |         |
       |            |           |------------------|        |         |
       |            +----------->                  |<-------+         |
       |                        |                  |                  |HTTP (testing)
       |                        +------------------+                  |
       |                                                              |
+------v------------------+                                           |
|  Outer Workstation      |     +-------------------+                 |
|-------------------------|     |  Inner Workstation|                 |
|                         |     |-------------------|                 |
|                         |     |                   |<----------------+
+-------------------------+     |                   |
                                +-------------------+

当从外部工作站连接到内部路由器的地址时,SSH 和 HTTP 都可以正常工作。

当使用 HTTP 从互联网连接到我的公共 IP 时,连接也工作正常。

但是 SSH 只是超时。很可能是因为回复没有正确路由回去。

我怀疑是因为 SSH 本身,还是因为服务器同时连接到内部和外部网络。

有什么想法可以解决这个问题吗?

服务器上的路由当前是:

ip route show
default via 10.1.7.254 dev eth0  metric 100 
10.1.7.0/24 dev eth0  proto kernel  scope link  src 10.1.7.1 
192.168.1.0/24 dev eth1  proto kernel  scope link  src 192.168.1.2

我必须改变这个吗?如果是这样怎么办?

router ssh nat port-forwarding
  • 2 2 个回答
  • 3006 Views

2 个回答

  • Voted
  1. Best Answer
    jpe
    2012-07-04T12:06:38+08:002012-07-04T12:06:38+08:00

    这种缺乏行为可能是由不对称路由和禁止它的外部路由器的特性引起的。服务器通过另一个连接(使用其默认网关连接到 Internet)路由 ssh 回复,外部路由器丢弃数据包。尝试使用iptraf或监控流量tcpdump并查看数据包在服务器的哪条线路上输出。Iptraf 有一个连接视图,在屏幕的下部显示数据包。您可能必须向内部路由器添加源 NAT 规则,以使 SSH 数据包以正确的方式返回。

    编辑:来自外部工作站的连接不通过外部路由器。它只是使用同一子网的 ip 直接连接到内部路由器,并且可以直接从服务器的外部接口接收数据包,因为它也在同一子网中。

    要澄清这一点,请考虑适当的 NAT 是如何工作的。当外部路由器从 Internet 的 SSH 端口接收到数据包时,其“TO”地址和端口将被重写为内部路由器的适当值。数据包的“FROM”地址保持不变。内部路由器收到数据包并再次重写 TO 地址和端口,但 FROM 地址保持不变,即 SSH 数据包来自的原始可路由 IP 地址。内部路由器将数据包传递到服务器(如果所有端口转发都正确配置),服务器中的 sshd 接收它并直接向外部路由器发送回复。如果外部路由器配置为丢弃非对称路由的数据包,它会发现发送方没有内部路由器的地址并将其回收到大容器中。

    • 1
  2. Tom Newton
    2012-07-04T12:06:25+08:002012-07-04T12:06:25+08:00

    如果服务器连接到两个网络,您可以将端口从外部 NAT 设备(我假设这是服务器的 gw)直接转发到服务器吗?

    • 0

相关问题

  • 用 D-LINK DFL-CPG310 防火墙替换 Cisco Pix 防火墙

  • 为 Cisco ASA 5510 上的端口 443/80 创建 NAT 规则和安全策略

  • Mac笔记本电脑无线路由器崩溃

  • 远程连接到局域网内的 Sql 服务器

  • 远程连接到 LAN 内的 SQL 服务器

Sidebar

Stats

  • 问题 205573
  • 回答 270741
  • 最佳答案 135370
  • 用户 68524
  • 热门
  • 回答
  • Marko Smith

    新安装后 postgres 的默认超级用户用户名/密码是什么?

    • 5 个回答
  • Marko Smith

    SFTP 使用什么端口?

    • 6 个回答
  • Marko Smith

    命令行列出 Windows Active Directory 组中的用户?

    • 9 个回答
  • Marko Smith

    什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同?

    • 3 个回答
  • Marko Smith

    如何确定bash变量是否为空?

    • 15 个回答
  • Martin Hope
    Tom Feiner 如何按大小对 du -h 输出进行排序 2009-02-26 05:42:42 +0800 CST
  • Martin Hope
    Noah Goodrich 什么是 Pem 文件,它与其他 OpenSSL 生成的密钥文件格式有何不同? 2009-05-19 18:24:42 +0800 CST
  • Martin Hope
    Brent 如何确定bash变量是否为空? 2009-05-13 09:54:48 +0800 CST
  • Martin Hope
    cletus 您如何找到在 Windows 中打开文件的进程? 2009-05-01 16:47:16 +0800 CST

热门标签

linux nginx windows networking ubuntu domain-name-system amazon-web-services active-directory apache-2.4 ssh

Explore

  • 主页
  • 问题
    • 最新
    • 热门
  • 标签
  • 帮助

Footer

AskOverflow.Dev

关于我们

  • 关于我们
  • 联系我们

Legal Stuff

  • Privacy Policy

Language

  • Pt
  • Server
  • Unix

© 2023 AskOverflow.DEV All Rights Reserve