LINUX 内网设备将服务映射到公网地址

环境描述:

1.设备A IP:192.168.0.2              位置: 上海
2.设备B IP:1.1.1.1                  位置: 北京

设备A为甲方提供的实验室中的设备,设备B为乙方公网设备。
应甲方要求,需要在指定的设备A上部署环境、服务,但是进行功能测试时,要通过公网通信。
设备A只有内网IP,可以访问公网,但是公网无法主动访问设备A,所以现在需要把设备A上的服务映射到设备B上。

映射过程:

1.通过SSH端口转发,将设备A的服务映射到设备B上(因为设备B无法主动连接设备A,所以要在设备A上进行SSH远程端口映射)

           在设备A上执行:ssh -o ServerAliveInterval=60 -f -N -R 8080:192.168.0.2:8443 test@1.1.1.1

           此命令的作用为:将本机上的服务端口8443,映射到设备B(1.1.1.1)的8080端口,当用户访问设备B的8080端口时,请求会转发到本机的8443端口上,具体是如何实现SSH隧道转发,这里不再描述,有兴趣可以自己搜索资料。
           Tips:这里有一个参数   -o ServerAliveInterval=60 必须要加上,不加此参数在长时间无操作的情况下ssh会超时,导致映射断开,此参数为每隔60s向ssh server端发送keep-alive包,保持ssh连接,防止超时

2.经过步骤1的操作,此时已经可以在设备B上看到监听的8080端口了,但是你会发现监听的IP为127.0.0.1这个回环地址(ssh远程映射只能映射远程设备的127上,没有任何办法可以改变),127是无法被外界直接访问的,所以这里我们还需要通过防火墙做一个DNAT,改变原始请求的目的地址(端口)

            在设备B上执行:iptables -t nat -A PREROUTING -p tcp --dport 8443 -j DNAT --to-destination 127.0.0.1:8080
            
            此命令的作用为:将访问本机8443端口的TCP报文转发至本机的127.0.0.1的8080端口上
            Tips:iptables添加以上规则时,Linux系统出于安全考虑,是不允许将请求转发至127.0.0.1这个回环地址上的,所以我们需要修改内核参数。
            sysctl -w net.ipv4.conf.eth0.route_localnet=1
            此时就可以将报文DNAT到127地址了。

经过以上两步操作,现在访问1.1.1.1:8443端口即访问192.168.0.2的8443端口

    原文作者:CastlePeak
    原文地址: https://segmentfault.com/a/1190000020293986
    本文转自网络文章,转载此文章仅为分享知识,如有侵权,请联系博主进行删除。
点赞