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

Linux 下设置 NAT 的一些问题

  •  
  •   Insomnia · 2014-02-04 06:05:23 +08:00 · 3194 次点击
    这是一个创建于 3965 天前的主题,其中的信息可能已经有所发展或是发生改变。
    现在使用的是 VMware vCloud 存放服务器(所谓的 VM)

    现在的问题是,在这个系统中使用 Linux 的 VM 。 每个 VM 都有两个 NIC ,其中一个是 IP 192.168.1.1,这个是给内网 ssh 进服务器的。 然后还有一个IP 是 192.168.2.1 这个是需要用来和外面做 NAT 的,外网的IP 是 123.123.123.123 这样子,然后这个 VMware vCloud 自动的设置NAT,将 192.168.2.1 和外网IP 123.123.123.123 对应了起来,现在配置完环境后,在内网使用 192.168.1.1 可以访问了。
    但是使用 123.123.123.123 就无法访问,所以现在想问的是,需要在 Linux 上面如何设置 iptabels 相关的命令才能化解这个问题呢?
    第 1 条附言  ·  2014-02-04 13:02:53 +08:00
    而且,我从这个 VM 上是可以直接访问外网的,我在外面做了一个访问地址,直接显示当前IP的。
    然后在这台 VM 上直接 curl http://www.getip.com/ip.php 这样子,直接显示了 NAT 的外网IP 123.123.123.123 所以这样看是不是算 VMware 已经自动配置好了 NAT 了呢?
    14 条回复    1970-01-01 08:00:00 +08:00
    adrianzhang
        1
    adrianzhang  
       2014-02-04 10:17:23 +08:00
    netstat -rn
    看一下路由表是什么样的
    Insomnia
        2
    Insomnia  
    OP
       2014-02-04 11:31:46 +08:00
    @adrianzhang

    Kernel IP routing table
    Destination Gateway Genmask Flags MSS Window irtt Iface
    192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
    192.168.3.0 192.168.1.254 255.255.255.0 UG 0 0 0 eth1
    192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
    169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth0
    169.254.0.0 0.0.0.0 255.255.0.0 U 0 0 0 eth1
    0.0.0.0 192.168.2.254 0.0.0.0 UG 0 0 0 eth0



    其中 192.168.3.0 这个因为我们的机器同样在这个域里面,为了能通过 192.168.1.1 这个IP直接ssh登入。
    raptium
        3
    raptium  
       2014-02-04 12:05:16 +08:00 via iPhone
    你这个 NAT 不是在虚拟机上做的,是在外面做的
    所以在虚拟机上不管怎么设置都没用的
    Insomnia
        4
    Insomnia  
    OP
       2014-02-04 12:21:41 +08:00
    @raptium 外面好像会直接分配好 IP 到这台机器的。那么这台机器上是否还需要做些什么?还是直接NAT那里设置为空就好?

    因为我已经可以用内网的 192.168.1.1 可以访问了,但是用外网的 IP 还无法访问。
    Insomnia
        5
    Insomnia  
    OP
       2014-02-04 12:32:19 +08:00   ❤️ 1
    @raptium 还有,如果我关掉 VMware 里面设置的防火墙,就可以直接 tracert 123.123.123.123 这个外网 IP ,这样的话,那么这样的话能说明这个 NAT 是已经自己系统生成的 OK 的吗?谢谢了。
    raptium
        6
    raptium  
       2014-02-04 15:22:50 +08:00 via iPad
    没用过 vCloud 所以我也不是很清楚具体网络结构和功能
    根据你的描述 123 这个 IP 应该是母机的外网 IP
    如果要继续用 NAT, 可以在外面配置 DNAT 将某些端口转发到内网 IP
    或者如果 123 这个 IP 是你独享的一个固定 IP,那么在上游路由配置正确的情况下,可以关掉 NAT 直接用桥接模式,虚拟机内将此 nic 设为固定 IP 即可(此时这个 IP 就不能再被母机或其他虚拟机使用了)
    adrianzhang
        7
    adrianzhang  
       2014-02-04 16:03:01 +08:00
    @Insomnia 奇怪,我怎么收不到at的信息。。。你的路由表
    192.168.1.0 0.0.0.0 255.255.255.0 U 0 0 0 eth1
    192.168.3.0 192.168.1.254 255.255.255.0 UG 0 0 0 eth1
    192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0

    第二条里的broadcast应为255.255.252.0,这样192.168.1.0和192.168.2.0才能给连进来。
    adrianzhang
        8
    adrianzhang  
       2014-02-04 16:14:54 +08:00
    @Insomnia 哦,对了,不仅是掩码改,还有网关也要改,192.168.1.254这个网关能路由到192.168.2.x段吗?如果改了掩码还是不能登,那就改网关上的配置,加一个路由项。
    tywtyw2002
        9
    tywtyw2002  
       2014-02-05 02:10:32 +08:00 via iPhone
    路由表问题

    0.0.0.0 192.168.2.254 0.0.0.0 UG 0 0 0 eth0
    Insomnia
        10
    Insomnia  
    OP
       2014-02-05 05:28:30 +08:00
    @raptium 现在我这边不能在外面配置 DNAT,好像这个NAT是默认系统弄好的,那这样的情况瞎,是不是我想要配置 route 才行?我是不是可以直接在 route 上配置一个路由,直接通外网的 ip ?


    @adrianzhang 第二条的规则只是为了让我本地的IP(192.168.3.1)可以 ssh 上 192.168.1.1 用的。 现在我从本地可以直接 ssh 上了。 只是外网的 ip 访问不到,打不开。。
    192.168.1.254 这个是在 eth1 上, 192.168.2.x 是 eth0 的,是需要给他们两个网卡再设置一个路由吗?




    @tywtyw2002 能详细的讲下,这里的问题以及如何修改吗?非常感谢
    adrianzhang
        11
    adrianzhang  
       2014-02-05 15:45:23 +08:00
    @Insomnia 哦,开始看错了以为要ssh到192.168.2.1

    按照你的路由表,从192.168.3.x发起到123.123.123.123的TCP到接收的路径是这样的
    192.168.3.x -- > 123.123.123.123
    123.123.123.123 --> 192.168.2.1 (eth0 on VM) [这是NAT在起作用]
    192.168.2.1 没有路径到192.168.3.x 所以192.168.3.x收不到响应。

    而路由表中192.168.2.0路由项将所有的包发往eth0,那么192.168.3.x跟eth0连了吗?如果没有连那就不能通喽。
    所以要改的话,将
    192.168.2.0 0.0.0.0 255.255.255.0 U 0 0 0 eth0
    里面的eth0去掉,或者加一条几乎一样就是最后为eth1的路由项
    adrianzhang
        12
    adrianzhang  
       2014-02-05 15:56:22 +08:00
    @Insomnia 仔细看一眼,是有回去路径的,因为192.168.2.1收到包后给回NAT,但是NAT上允许内部地址路由外部地址吗?
    Insomnia
        13
    Insomnia  
    OP
       2014-02-06 09:16:59 +08:00
    @adrianzhang 他这个 NAT 的是默认设置好的,我这里没有权限去设置,所以不知道是不是问题在这里。。

    我在 VM 里面直接使用 CULR 192.168.2.1 是可以拿到东西的,但是就是外面不行。。所以还是不解。
    adrianzhang
        14
    adrianzhang  
       2014-02-06 09:57:46 +08:00
    @Insomnia 做个小测试就好了,在192.168.3.x找个机器,在nat指向它,然后找3.x网段另一个机器,访问该机器的外地址。这样就知道是不是nat配置的问题了。一般说来,很多NAT不支持内网端口直接路由外端口。
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   3385 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 25ms · UTC 00:54 · PVG 08:54 · LAX 16:54 · JFK 19:54
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.