外网访问局域网服务器与pycharm远程调式

前言:

看到老姐使用teamViewer繁琐的调试代码,内心一万个问号飞过。没想到搞深度学习的这么不拘泥于细节,果然是大道至简,不嫌麻烦。

                                                                      外网访问局域网服务器与pycharm远程调式_第1张图片

1、网络基础

1.1基础知识

互联网通过ip地址来进行寻址,而公网ip由运营商分配。

家庭宽带更便宜些,但使用NAT(Network Address Translation,网络地址转换)技术:你和其他人共用公网ip,节省ip资源。这种情况下你 只能主动和服务器建立连接,因为就算公网服务器知道你当前所属的公网ip,并发送消息,nat也会因为你没有主动请求过此公网ip,而过滤掉这个消息。而且家庭宽带用户为动态ip,一段时间换一个。再就是因为国家管控等原因,运营商会封锁用户使用的公网ip端口,比如电信封80。

静态公网IP地址其实就相当于使用专线宽带,较贵,一般企业用。如果静态IP地址有了(装了专线),自己搭建服务器和建网站涉及到备案问题:1、IP地址需要在接入服务商处备案2、域名需要在域名注册服务商处进行备案。

而有人就有疑问了:那为啥qq中两个用户仍可以互相通信呢?因为当今部署的服务大多为C/S架构,其中相对隐匿的客户机主动向周知的服务端(拥有静态IP地址和DNS名称)发起链接请求。建立好tcp连接后,两者就可以互相发送消息了。这种情况为一种非对称的通讯模型,即内网中的主机可以初始化对外的链接,而外网的主机却不能初始化对内网的链接,除非经过中间件管理员特殊配置。上文提到的teamViewer能够连接两台电脑也同理。就是用户a和服务器建立好连接,然后用户b也与服务器建立好连接且不断开,a向b发送消息,具体的流程即为用户a向服务器发送消息,服务器将消息转发给b。当然这只是非常简单的说明,具体流程每个应用都不太相同。

有了上面的说明我们就明白了:用户电脑访问局域网中的服务器还是有一些难度的。

1.2解决办法:

1、直接将服务器放到公网中,节省出来大笔打游戏的时间。

2、你说你不打游戏,或者是因为安全问题或是学校问题甚至是金钱问题,无法将服务器放到公网中,那现在这个问题其实就是p2p通信的问题,江湖流传已久,解决办法也很多。比如上文说的c/s模型以及udp打孔等。但是都不适合本问题解决。

2、有公网ip的主机访问局域网服务器

先将问题简化一下,使用具有公网ip的主机访问在局域网中的服务器。

具有公网ip的主机最简单的做法是云服务器,大学生优惠10块钱一个月,够用了。恰巧我财力雄厚,买了1台,可以用来实验一下。现在问题很简单了,云服务器如何连接局域网中的服务器呢?百度查出来很多教程:

建立SSH反向隧道:

在局域网服务器中运行:

ssh -NfR 1122:localhost:22 root@你的云服务器公网ip

云服务中首先开放1122端口,然后运行:

ssh localhost -p 1122

你会惊奇的发现,**,真的可以。

3、个人电脑访问局域网服务器

终于来到了问题所在,顺着搜索,也有不少解决方案,具体的原理还是不太清楚,能用就行,等我搞懂了再更新吧。

1、首先完成了上面叙述的云服务器ssh连接了局域网服务器。

2、使用个人电脑进行操作,我用的是windows,打开cmd窗口即可。

ssh -N -f -L 6000:localhost:1122 -p 22 root@你的云服务器公网ip -o TCPKeepAlive=yes

3、再打开一个cmd窗口,测试是否可以进行连接,不用每次都运行,运行了也可以关闭。运行

ssh -p 6000 ubuntu@localhost

**,真tm神奇。

4、使用pycharm远程调试服务器

这个教程也很多,按照教程来就行,反正现在也能ssh连接到局域网服务器了。跟teamViewer说声再见吧。

PyCharm实现高效远程调试代码

Pycharm 设置远程调试

5、到底如何使用?

前面讲了这么多东西,自己到底需要走哪几步呢?

因为云服务器我配置好了,所以只需要走标题3和标题4就好了。

具体的为标题3的流程为每次开机运行。

标题4的流程为每次新建项目时运行。

6、其他参考连接:

p2p通信原理及实现

外部网络SSH访问公司内网服务器终极解决方案(实现SFTP直连内网)

利用SSH反向隧道,连接内网服务器

windows下pycharm通过跳板机使用远程解释器remote interpreter

你可能感兴趣的:(网络)