华为企业路由器 做过 NAT 映射后,从外网访问的用户,程序获取到的 ip 全都是同一 IP (网关 IP)

2017-12-14 12:00:36 +08:00
 sbmzhcn

外网地址:x.x.x.x 内部服务器地址: 192.168.10.225

做过 nat 映射后,访问 x.x.x.x 实际访问的是 192.168.10.225 , 一切正常,唯的问题是:

192.168.10.225 上面的程序,获取到的客户 ip 地址全都是 192.168.100.1 ,这个是路由器地址。

我在网上找过很多答案都解决不了,请问有谁遇到相同情况没?

企业中通过外网访问公司内部论坛,比如 discuz 这种,有很多需求会要得到访客的 ip 的地址的,如果用的是 nat 一般是获取 不到用户 ip 的,你们公司是如何解决的?

能不能不通过 nat 把外网映射到内网上面。

我可以通过 ssh 访问路由器,可以命令操作。

4969 次点击
所在节点    问与答
25 条回复
exch4nge
2017-12-14 12:21:06 +08:00
一般是有公网 IP 的服务器用 nginx 之类的做代理,然后用 HTTP 头里的当用户 IP 吧
sbmzhcn
2017-12-14 12:24:13 +08:00
gamexg
2017-12-14 12:32:03 +08:00
路由器问题,
但是不知道华为路由器怎么修正这个问题。
大概是 snat 不只设置了外网接口,把内网接口也设置了。

另外不是一个网段还是打错了?
Nioty
2017-12-14 12:33:44 +08:00
在内网的 dns 上把论坛 ip 解析到内网就行了
Nioty
2017-12-14 12:38:02 +08:00
抱歉回复错了 没看清题 ()
exch4nge
2017-12-14 12:40:30 +08:00
3L 说的 SNAT 应该是对的,我上面说的忽略吧。。。
topbandit
2017-12-14 13:12:29 +08:00
ssh 进去 nat 配置贴出来看看什么情况?
BOYPT
2017-12-14 13:14:26 +08:00
内部服务器如果网管地址也是这个路由器,那 NAT 上只做 DNAT 就可以,不需要做 SNAT,这样你看到的来源地址还是原来的外网地址。
yingfengi
2017-12-14 13:26:06 +08:00
从 http 头取用户地址
isyu
2017-12-14 14:07:39 +08:00
你的 ip 不止一个用途吗?那你可以用 ACL 和 destination-nat 来做 NAT 并且不更改源 IP
1.添加 ACL
<sysname> system-view
[sysname] acl number 3333
[sysname-acl-adv-3333] rule permit destination 外网地址 port NAT 端口
[sysname-acl-adv-3333] quit
2.创建 destination-nat
[sysname] firewall zone untrust
[sysname-zone-untrust] destination-nat 3333 address 内网服务器 port 内网端口
carterdang
2017-12-14 14:45:12 +08:00
只需 dnat, 你应该做了双向 nat 吧
sbmzhcn
2017-12-14 15:46:56 +08:00
```
[USG2200]display nat server
15:49:55 2017/12/14
Server in private network information:
id : 0
zone : ---
interface : GigabitEthernet0/0/0
global-start-addr : 116.193.49.157 global-end-addr : ---
inside-start-addr : 192.168.10.225 inside-end-addr : ---
global-start-port : 0(any) global-end-port : ---
insideport : 0(any)
globalvpn : public insidevpn : public
protocol : tcp vrrp : ---
no-reverse : no

Total 1 NAT servers

```
命令行不太熟悉,我在网页版使用的仅有目的 nat
carterdang
2017-12-14 15:51:02 +08:00
这是防火墙吗,display firewall session table 看看 客户 ip 是不是被转换成了内网 ip
sbmzhcn
2017-12-14 15:54:27 +08:00
@isyu

```
[USG2200-acl-adv-3333]rule permit ?
<1-255> Specify the protocol number
gre GRE tunneling(47)
icmp ICMP Protocol(1)
igmp IGMP Protocol(2)
ip Any IP protocol
ipinip IP in IP tunneling(4)
ospf OSPF routing protocol(89)
service-set Indicate service set
tcp TCP Protocol(6)
udp UDP Protocol (17)

[USG2200-acl-adv-3333]rule permit destination ?
^
Error: Wrong parameter found at '^' position.
```
sbmzhcn
2017-12-14 15:57:05 +08:00
[USG2200-acl-adv-3333]display firewall session table
15:59:58 2017/12/14
Current Total Sessions : 1517
143 http VPN:public --> public 192.168.10.215:63688[116.193.49.157:2055]-->163.177.56.70:80
203 udp VPN:public --> public 192.168.10.215:53157[116.193.49.157:49150]-->47.90.57.164:10087
341 udp VPN:public --> public 192.168.10.215:34991[116.193.49.157:49139]-->45.32.118.45:10019
429 tcp VPN:public --> public 192.168.10.215:46777[116.193.49.157:17798]-->182.92.100.67:1113
751 tcp VPN:public --> public 192.168.20.223:6716[116.193.49.157:2194]-->217.146.13.50:5938
930 msn-stun VPN:public --> public 192.168.20.207:45203[116.193.49.157:16344]-->112.13.64.167:3478
1016 udp VPN:public --> public 192.168.10.215:7618[116.193.49.157:2052]-->123.131.0.19:7719
1250 dns VPN:public --> public 192.168.100.1:52469[192.168.100.1:52470]-->192.168.5.1:53
1338 http VPN:public --> public 192.168.10.215:56335[116.193.49.157:6519]-->182.254.89.122:80
1543 udp VPN:public --> public 192.168.10.215:44424[116.193.49.157:49152]-->47.90.57.164:10087
1568 udp VPN:public --> public 192.168.10.215:58528[116.193.49.157:49161]-->45.32.100.53:10033
1608 https VPN:public --> public 192.168.10.220:49959[116.193.49.157:28804]-->173.194.196.197:443
1654 udp VPN:public --> public 192.168.10.215:46904[116.193.49.157:49163]-->45.32.118.45:10019
1731 tcp VPN:public --> public 192.168.10.215:55177[116.193.49.157:2307]-->61.135.186.113:8800
1736 udp VPN:public --> public 192.168.10.215:39008[116.193.49.157:49201]-->45.32.118.45:10019
1956 tcp VPN:public --> public 192.168.10.215:47149[116.193.49.157:44829]-->47.90.57.164:10087
2059 udp VPN:public --> public 192.168.10.215:58744[116.193.49.157:49202]-->45.32.100.53:10033
2139 tcp VPN:public --> public 192.168.10.250:53881[116.193.49.157:34402]-->182.92.100.67:21807
2196 tcp VPN:public --> public 192.168.10.215:58934[116.193.49.157:43183]-->45.32.118.45:10019
2360 https VPN:public --> public 192.168.20.207:38331[116.193.49.157:2365]-->118.194.55.199:443
2387 udp VPN:public --> public 192.168.10.215:7618[116.193.49.157:2049]-->222.247.209.182:49630
2649 http VPN:public --> public 192.168.10.215:59051[116.193.49.157:16270]-->124.14.1.174:80
2657 tcp VPN:public --> public 192.168.20.207:33349[116.193.49.157:2581]-->180.149.136.83:4829
2750 tcp VPN:public --> public 192.168.10.215:47035[116.193.49.157:44811]-->47.90.57.164:10087
2751 dns VPN:public --> public 192.168.100.1:52358[192.168.100.1:52359]-->192.168.5.1:53
2953 https VPN:public --> public 192.168.10.220:49943[116.193.49.157:12871]-->119.75.222.122:443
3196 tcp VPN:public --> public 192.168.10.215:47023[116.193.49.157:44809]-->47.90.57.164:10087
3241 http VPN:public --> public 192.168.10.245:55474[116.193.49.157:2148]-->101.199.97.164:80
3260 https VPN:public --> public 192.168.10.245:55996[116.193.49.157:3684]-->220.181.13.219:443
3459 tcp VPN:public --> public 192.168.10.215:47142[116.193.49.157:44828]-->47.90.57.164:10087
3496 tcp VPN:public --> public 192.168.10.215:46701[116.193.49.157:17760]-->182.92.100.67:1113
3523 udp VPN:public --> public 192.168.10.215:58324[116.193.49.157:49173]-->47.90.57.164:10087
3589 dns VPN:public --> public 192.168.100.1:52442[192.168.100.1:52443]-->192.168.5.1:53
@carterdang
carterdang
2017-12-14 16:16:23 +08:00
没看到有 nat server 相关的 session,应该现在没有你的客户在访问,有大量的内网到外网的,应该有源地址 NaT,是不是你的源地址 NAT 的策略 包括了你的目的 NAT 的域,另外直接贴出公网地址是不是不好,最好隐藏下,可以联系我 TG,lxcavcba
isyu
2017-12-14 16:26:29 +08:00
@sbmzhcn 哦你使用的 USG2200 系列啊
1.添加 ACL
<sysname> system-view
[sysname] acl number 3333
[sysname-acl-adv-3333] rule permit tcp destination 外网地址 0 destination-port NATport
[sysname-acl-adv-3333] quit
2.创建 destination-nat
[sysname] firewall zone 你设置的区域
[sysname-zone-untrust] destination-nat 3333 address 内网服务器 port 内网端口
[sysname-zone-untrust] quit
记得一定要关闭 ALG 功能,如果你们还用这个 IP 上网,源 NAT 你也需要更改设置避开服务器的 IP 或者安全区域。
isyu
2017-12-14 16:35:27 +08:00
最好还是使用 WEB 页面来设置啦,简单点
USG2200 新版固件有目的 NAT 的 web 设置页面的。还要先把原来那条 NAT 规则删掉
yanest
2017-12-14 17:08:37 +08:00
usg2200 还是扔了吧。百兆端口,性能也不行,广播包稍微多点就不行了。 换成 er-x 都比这货强
sbmzhcn
2017-12-15 08:42:10 +08:00
这几天有事 下周过去弄,谢谢大家回复。 这路由器可是公司花好多钱买的!!!

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

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

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

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

© 2021 V2EX