Linux 下设置 NAT 的一些问题

2014-02-04 06:05:23 +08:00
 Insomnia
现在使用的是 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 相关的命令才能化解这个问题呢?
3181 次点击
所在节点    Linux
14 条回复
adrianzhang
2014-02-04 10:17:23 +08:00
netstat -rn
看一下路由表是什么样的
Insomnia
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
2014-02-04 12:05:16 +08:00
你这个 NAT 不是在虚拟机上做的,是在外面做的
所以在虚拟机上不管怎么设置都没用的
Insomnia
2014-02-04 12:21:41 +08:00
@raptium 外面好像会直接分配好 IP 到这台机器的。那么这台机器上是否还需要做些什么?还是直接NAT那里设置为空就好?

因为我已经可以用内网的 192.168.1.1 可以访问了,但是用外网的 IP 还无法访问。
Insomnia
2014-02-04 12:32:19 +08:00
@raptium 还有,如果我关掉 VMware 里面设置的防火墙,就可以直接 tracert 123.123.123.123 这个外网 IP ,这样的话,那么这样的话能说明这个 NAT 是已经自己系统生成的 OK 的吗?谢谢了。
raptium
2014-02-04 15:22:50 +08:00
没用过 vCloud 所以我也不是很清楚具体网络结构和功能
根据你的描述 123 这个 IP 应该是母机的外网 IP
如果要继续用 NAT, 可以在外面配置 DNAT 将某些端口转发到内网 IP
或者如果 123 这个 IP 是你独享的一个固定 IP,那么在上游路由配置正确的情况下,可以关掉 NAT 直接用桥接模式,虚拟机内将此 nic 设为固定 IP 即可(此时这个 IP 就不能再被母机或其他虚拟机使用了)
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
2014-02-04 16:14:54 +08:00
@Insomnia 哦,对了,不仅是掩码改,还有网关也要改,192.168.1.254这个网关能路由到192.168.2.x段吗?如果改了掩码还是不能登,那就改网关上的配置,加一个路由项。
tywtyw2002
2014-02-05 02:10:32 +08:00
路由表问题

0.0.0.0 192.168.2.254 0.0.0.0 UG 0 0 0 eth0
Insomnia
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
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
2014-02-05 15:56:22 +08:00
@Insomnia 仔细看一眼,是有回去路径的,因为192.168.2.1收到包后给回NAT,但是NAT上允许内部地址路由外部地址吗?
Insomnia
2014-02-06 09:16:59 +08:00
@adrianzhang 他这个 NAT 的是默认设置好的,我这里没有权限去设置,所以不知道是不是问题在这里。。

我在 VM 里面直接使用 CULR 192.168.2.1 是可以拿到东西的,但是就是外面不行。。所以还是不解。
adrianzhang
2014-02-06 09:57:46 +08:00
@Insomnia 做个小测试就好了,在192.168.3.x找个机器,在nat指向它,然后找3.x网段另一个机器,访问该机器的外地址。这样就知道是不是nat配置的问题了。一般说来,很多NAT不支持内网端口直接路由外端口。

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/98953

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX