V2EX = way to explore
V2EX 是一个关于分享和探索的地方
现在注册
已注册用户请  登录
V2EX 提问指南
sbmzhcn
V2EX  ›  问与答

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

  •  
  •   sbmzhcn · 2017-12-14 12:00:36 +08:00 · 4989 次点击
    这是一个创建于 2566 天前的主题,其中的信息可能已经有所发展或是发生改变。

    外网地址: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 访问路由器,可以命令操作。

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

    另外不是一个网段还是打错了?
    Nioty
        4
    Nioty  
       2017-12-14 12:33:44 +08:00 via Android
    在内网的 dns 上把论坛 ip 解析到内网就行了
    Nioty
        5
    Nioty  
       2017-12-14 12:38:02 +08:00 via Android
    抱歉回复错了 没看清题 ()
    exch4nge
        6
    exch4nge  
       2017-12-14 12:40:30 +08:00
    3L 说的 SNAT 应该是对的,我上面说的忽略吧。。。
    topbandit
        7
    topbandit  
       2017-12-14 13:12:29 +08:00
    ssh 进去 nat 配置贴出来看看什么情况?
    BOYPT
        8
    BOYPT  
       2017-12-14 13:14:26 +08:00
    内部服务器如果网管地址也是这个路由器,那 NAT 上只做 DNAT 就可以,不需要做 SNAT,这样你看到的来源地址还是原来的外网地址。
    yingfengi
        9
    yingfengi  
       2017-12-14 13:26:06 +08:00 via Android
    从 http 头取用户地址
    isyu
        10
    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
        11
    carterdang  
       2017-12-14 14:45:12 +08:00 via Android
    只需 dnat, 你应该做了双向 nat 吧
    sbmzhcn
        12
    sbmzhcn  
    OP
       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
        13
    carterdang  
       2017-12-14 15:51:02 +08:00 via Android
    这是防火墙吗,display firewall session table 看看 客户 ip 是不是被转换成了内网 ip
    sbmzhcn
        14
    sbmzhcn  
    OP
       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
        15
    sbmzhcn  
    OP
       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
        16
    carterdang  
       2017-12-14 16:16:23 +08:00 via Android
    没看到有 nat server 相关的 session,应该现在没有你的客户在访问,有大量的内网到外网的,应该有源地址 NaT,是不是你的源地址 NAT 的策略 包括了你的目的 NAT 的域,另外直接贴出公网地址是不是不好,最好隐藏下,可以联系我 TG,lxcavcba
    isyu
        17
    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
        18
    isyu  
       2017-12-14 16:35:27 +08:00
    最好还是使用 WEB 页面来设置啦,简单点
    USG2200 新版固件有目的 NAT 的 web 设置页面的。还要先把原来那条 NAT 规则删掉
    yanest
        19
    yanest  
       2017-12-14 17:08:37 +08:00
    usg2200 还是扔了吧。百兆端口,性能也不行,广播包稍微多点就不行了。 换成 er-x 都比这货强
    sbmzhcn
        20
    sbmzhcn  
    OP
       2017-12-15 08:42:10 +08:00 via iPhone
    这几天有事 下周过去弄,谢谢大家回复。 这路由器可是公司花好多钱买的!!!
    Telegram
        21
    Telegram  
       2017-12-15 10:40:34 +08:00 via iPhone
    @sbmzhcn #20 既然花了好多钱,直接找华为技术支持好了
    sbmzhcn
        22
    sbmzhcn  
    OP
       2017-12-18 09:39:55 +08:00
    @isyu 感谢回复,我在 web 页面之前设置的就是只有目的 NAT 没有设置源 NAT.
    sbmzhcn
        23
    sbmzhcn  
    OP
       2017-12-18 10:33:35 +08:00
    这个问题解决了:

    “,请您检查一下设备配置,看一下是不是 USG 的内网口配置了 nat enable 或映射之类的” 这是官方客服回复的,修改了 192.168.100.1 接口的 nat enable 为禁用就好了。

    不过外访问 ip 问题解决了,但此时内网使用外网的 ip 却无法访问了。
    isyu
        24
    isyu  
       2017-12-19 10:41:01 +08:00
    @sbmzhcn 你关闭了域内 NAT,自然内网 IP 就无法访问了。想完全解决你必须将服务器设置到别的网段,然后关闭域内 NAT,开启内网的域内 NAT,对服务器 IP 使用目的 NAT
    sbmzhcn
        25
    sbmzhcn  
    OP
       2017-12-19 10:53:20 +08:00
    @isyu 服务器用的是 192.168.10.2xx 网关是 192.168.100.1 应该是不同网段吧。 具体怎么操作,我需要在 192.168.100.1 上做一个目的 NAT 吗? 但内部地址只能使用一次。我只能设置外网 ip 到 192.168.10.2xx 的 NAT
    关于   ·   帮助文档   ·   博客   ·   API   ·   FAQ   ·   实用小工具   ·   1302 人在线   最高记录 6679   ·     Select Language
    创意工作者们的社区
    World is powered by solitude
    VERSION: 3.9.8.5 · 95ms · UTC 17:39 · PVG 01:39 · LAX 09:39 · JFK 12:39
    Developed with CodeLauncher
    ♥ Do have faith in what you're doing.