背景:
内网主机A配置:
ip: 192.168.1.100
gateway: 192.168.1.1 (也是主机A连接到的路由器LAN口地址)
DNS:201.101.172.35
虚拟机centos7配置:(虚拟机网络模式选的是桥接模式)
ip: 192.168.1.120
gateway: 192.168.1.1
DNS:201.101.172.35
A通过路由器可以访问外网。
主机A上安装了virtualbox虚拟机,虚拟机中以桥接模式安装了centos7。
centos7的ip为固定ip:192.168.1.120。之所以把centos7的ip设置为固定ip,就是为了方便远程控制。(centos7固定ip的设置方法参考我另一篇文章:http://blog.csdn/liu_shi_jun/article/details/78088185)
现在我有两个需求:
- 从公司(外部网络)访问远程控制我的内网主机A
- 从公司(外部网络)ssh 连接我的虚拟机系统centos7。
我的主机A之所以能够上网,是因为A连接到了路由器,路由器上有公网IP,当A向外发送信息时,先发送到路由器,路由器再根据目的地址进行转发,返回信息也是先发送到路由器,再由路由器发送到内网主机A上。但是远程连接就行不通了,我远程连接只能连接到路由器(路由器有公网IP),但却无法定位到具体某一台内网电脑上。不过通过在路由器上设置端口映射来解决这个问题。
路由器的虚拟服务器(端口映射)功能:对Linux和Windows都适用
此方法利用路由器的虚拟服务器(端口映射)功能将内网映射到外网,从而实现在互联网上访问局域网内部机器的特定端口服务的功能
在内网主机A打开浏览器登入路由器地址:192.168.1.1
点击转发规则—虚拟服务器,创建端口映射。
添加新条目,本机的ip是192.168.1.100,需要连接的端口是3389。(远程控制默认的端口就是3389).
点击保存即可。
然后点击运行状态,查看路由器ip(注意:路由器ip,不一定是外网ip,有可能还经过了其他路由,本文中只经过了一层路由,所以路由器上WAN口ip为公网ip)
看到路由的ip是,100.64.73.154。
设置好之后,再外网电脑上打开远程桌面连接。
输入ip地址:100.64.73.153和用户名,这里用户名就是我A电脑上的账户名,如果你没有设置过,那么一般是administrator,这是windows的默认账户。
远程桌面默认的端口是3389。与我们在路由器上设置的映射端口是一致的。因为我这是测试,所以没有再去额外修改远程控制的端口号,如果是实际生产环境,或者对安全有要求的情况下,需要修改远程桌面所连接的端口号,以防止别人通过这个默认端口对你进行攻击。
不出意外的话,就能远程控制我的内网电脑A了。然后我点击“连接”按钮,却依然连不上!!!
提示我“凭证不工作”,我明明用户名、密码输入的没错啊(其实我没设置密码,哈哈)!当然,如果你出现这个错误,首先检查你输入的用户名,密码是否有误。我的解决办法。
在**主机A(被控机上)**打开本地组策略编辑器,看下有关系统安全设置的选项,将本地账户的共享和安全模型设置为经典模式
开始-->运行->输入:gpedit.msc->计算机配置->Windows设置->安全设置->本地策略->安全选项->网络访问:本地帐户的共享和安全模型。
修改为使用经典模式,如下图
设置好之后,总应该好了吧。再次远程连接,提示“由于账户限制,无法登陆”!!!还是没连上! 竟然是因为我没输入密码的缘故!原来对于无密码登陆用户,windows是有安全限制的。解决办法:
开始-运行-gpedit.msc-回车-计算机配置-windows设置-安全设置-本地策略-安全选项-账户:使用空白密码的本地账户只允许进行控制台登录-双击选择已禁用-确定
将它禁用掉。或者给账户设置一个密码,推荐给账户设置密码!
再次远程桌面,终于成功了!!!
对于第二个需求,只需要在路由器上再添加一条端口映射,端口选22(ssh默认连接端口为22),ip为centos7的ip:192.168.1.120。
总结:
为什么我做端口映射就可以访问到我的内网主机了呢?
普遍的说法是:路由器上的端口映射能够将发给这个端口的数据转发给内网主机,所以你通过路由器ip+端口就可以访问内网主机了呀。
其实这种说法不明确,通过这次安装,我的理解是:
首先我在被控机A上设置了允许远程控制,这是前提。其实这一步就在主机A上开放了3389端口,内部远程控制的程序就在监听这个端口。外网远程控制时,将数据首先发送到路由器上,路由器检查目的端口,发现是3389,那么根据端口映射,将数据转发到内网主机A上。我们知道,应用层的数据发送需要ip和端口来定位。所以其实是将数据发到主机A的3389端口上,主机A上也正在监听这个3389端口这个端口,一拍即合。
所以对于
路由器的虚拟服务器(端口映射)功能:对Linux和Windows都适用
此方法利用路由器的虚拟服务器(端口映射)功能将内网映射到外网,从而实现在互联网上访问局域网内部机器的特定端口服务的功能
这句话的理解更清晰了。如果被控机上不开启远程控制,也就是不开放3389端口,即使你路由器将数据转过来了,被控机会鸟你吗!肯定会直接将这些信息丢弃!
由此我们也知道,对于ssh连接centos7,路由器上设置的端口也不一定要22,只要被控机centos7修改了ssh服务的端口号,那么这个路由器上的设置也是可以修改的。
更多推荐
外网远程控制局域网内主机,路由器端口转发设置
发布评论