NAT 通过NAT应用从外网 访问 内网数据库主机(端口映射)

这种有一些类似代理的概念但又不同 它们依赖一个NAT转换服务器应用交互 如果我需要在远程访问一台在内网中的主机 总能找到办法不是吗?但如果我希望在外网通过数据库管理器访问内网内的数据库服务器呢?同时还有一个前提条件 存放数据库的内网服务器与公网(外网)是完全不通的 这里你可能会说这根本无法访问 是的这不可能被访问到 但如果在内网中有一台主机是通外网的呢?这貌似残生了一个悖论!如果内网主机根本无法外网 那么怎么还有主机可以访问外网呢?

那么如果这台内网主机是双网卡,一张网卡接内网的交换机或路由器、另一张网卡是接的外网 那么此时如果你想要访问内网的主机是不是变得可行?对只要你可以访问到这台通外网的主机就可以。

那么访问这台通外网的双网卡主机的方法 实际上只有一种你必须让它可以与你通信 而这无外乎都需要有一个可与自己在外网应用通信的程序,那么绝大部分人都不会采取NAT的方式 而不是选择在机器上部署自己的应用 然后由此应用处理过后转发给自己在外网的程序 而如果我仅仅只是希望在外网访问一个根本不通外网的主机里面的数据库 而且我就想在任何语言中通过API访问此数据库 那就无可避免的需要使用NAT。

NAT上面提到它有些类似于PROXY 提供一种对流量路由的机制;它可以保证内网与公网内的地址转换;即远程客户端可以访问内网主机 同时不通外网的主机可以通过NAT路由服务器 链接外网;

那NAT一般有几类形式呢?第一种是“基于端口的转换”、但这种方式比较弱;如果公网想访问内网就必须先让NAT路由器服务器进行对外与对内的端口映射;第二种是“基于地址端点的转换” 这个与第一种基本差不多;不过还有更强大的一种;说它是NAT又不像,代理de呢又不纯粹;本文就不累赘了、

                INIDocument document = new INIDocument(path);
                document.Load();
                foreach (INISection section in document.Sections)
                {
                    INIKeyCollection keys = section.Keys;
                    NATsService.Start(new NATsConfiguration
                    {
                        INPUT_NIC = IPAddress.Parse(keys["INPUT_NIC"].Value),
                        INPUT_PORT = Convert.ToInt32(keys["INPUT_PORT"].Value),

                        OUTPUT_NIC = IPAddress.Parse(keys["OUTPUT_NIC"].Value),
                        OUTPUT_ADDRESS = IPAddress.Parse(keys["OUTPUT_ADDRESS"].Value),
                        OUTPUT_PORT = Convert.ToInt32(keys["OUTPUT_PORT"].Value)
                    });
                }
上述代码展示配置并启动一个NATsSerice;它将把所有输入网卡某个端口的流量转换成输出网卡可以访问的远程服务器上去;本代码是“基于端口的转换“的方式;并且它只

实现了TCP转换;不过一般这种方式就实现上是最简单快捷de;

SourceCode: https://pan.baidu.com/s/1nv7ksjB


你可能感兴趣的:(C#,NAT)