집 >운영 및 유지보수 >리눅스 운영 및 유지 관리 >SSH 역방향 프록시 및 autossh를 사용하여 외부 네트워크에서 내부 네트워크에 연결
1. 현재 기계 상태를 설명하고 정리합니다.최근에 이런 문제가 생겼습니다. 후배나 친구들이 연습할 수 있도록 연구실에 서버를 설치했습니다.Linux 그러면 연구실에 직접 연결해도 문제가 없습니다. 그런데 문제는 기숙사로 돌아가면 캠퍼스 네트워크를 사용하는 아동화는 여전히 연결이 가능하지만, 외부 네트워크를 사용하는 젊은 부자들은 인트라넷에 들어갈 수 없다는 것입니다. 외부 네트워크를 통해 인트라넷 서버에 접속하는 방법이 있나요? 대답은 '예'입니다. 단, 외부 네트워크에서 접속할 수 있는 서버라는 조건이 필요합니다.
PS: 123.123.123.123은 제가 임의로 선택한 것입니다. 다른 사람의 서버를 공격하지 마세요.
일반인의 용어로는 머신 A를 머신 B의 역방향 프록시로 사용하는 것입니다. 로컬 포트 전달을 구현하려면 머신 B에서 전달 프록시를 수행하세요
여기에서는 SSH와 함께 제공되는 centos7을 사용하고 있습니다. 다른 버전의 Linux를 사용하는 경우 수동으로 Google에 문의하세요.
ssh -fCNR
ssh -fCNR
ssh -fCNL
-f 后台执行ssh指令 -C 允许压缩数据 -N 不执行远程指令 -R 将远程主机(服务器)的某个端口转发到本地端指定机器的指定端口 -L 将本地机(客户机)的某个端口转发到远端指定机器的指定端口 -p 指定远程主机的端口 ******************区分大小写啊各位亲******************
建立A机器到B机器的反向代理,具体指令为
ssh -fCNR [B机器IP或省略]:[B机器端口]:[A机器的IP]:[A机器端口] [登陆B机器的用户名@服务器IP]
在这里我使用了B机器的7280端口,以及A机器的22端口,按照上面的指令就是这样子的操作
ssh -fCNR 7280:localhost:22 root@123.123.123.123
检验是否已经启动了可以使用ps aux | grep ssh
指令来查看:
建立B机器的正向代理,用来做转发,具体指令为
ssh -fCNL [A机器IP或省略]:[A机器端口]:[B机器的IP]:[B机器端口] [登陆B机器的用户名@B机器的IP]
按照第3那里输入的指令,这里的B机器的端口和上面的B机器的端口是一致的,端口1234的也是B机器的。
ssh -fCNL *:1234:localhost:7280 localhost
检验是否已经启动了可以使用ps aux | grep ssh
指令来查看:
在此1234端口为本地转发端口,负责和外网进行通信,并将数据转发的7280这个端口,实现了可以从其他机器访问的功能。同时,*号表示可以接受任何IP的访问。
至此我们都配置好了AB机器,那么我们就可以从一部外网的电脑登陆到内网里面去啦。鉴于我目前的电脑在内网,而服务器都是外网的(也就是配置的B机器),所以可以通过B机器连接到我内网的A中,具体指令为:
ssh -p1234 gdut728@123.123.123.123
在此-p参数为指定登陆的IP,我们在上面指定了1234端口为转发端口,故用1234端口登陆,然后gdut728是内网A机器的用户名,123.123.123.123为外网B机器的IP地址。
不幸的是这种ssh反向链接会因为超时而关闭,如果关闭了那从外网连通内网的通道就无法维持了,为此我们需要另外的方法来提供稳定的ssh反向代理隧道。
在内网的机器A上面执行:
ssh-copy-id 内网用户名@外网IP -p指定转发的端口
按照之前我设定的端口,这个指令就是如下
ssh-copy-id gdut728@123.123.123.123 -p1234
那以后这台内网的A机器ssh登陆我外网的B机器就可以免密码登陆啦~
检验是否已经可以使用免密码登陆可以使用如下指令来检验:
ssh root@123.123.123.123
centos7上没有默认安装autossh
的,所以使用一下命令安装
yum install autossh
来看看具体的autossh的指令为
autossh -M 7281 -fCNR 7280:localhost:22 root@123.123.123.123
autossh
的参数与ssh的参数是一致的,但是不同的是,在隧道断开的时候,autossh会自动重新连接而ssh不会。另外不同的是我们需要指出的-M参数,这个参数指定一个端口,这个端口是外网的B机器用来接收内网A机器的信息,如果隧道不正常而返回给A机器让他实现重新连接。
输入:
vi /etc/rc.d/rc.local
添加内容:
autossh -M 7281 -fCNR 7280:localhost:22 root@123.123.123.123
因为centos7之后,原来直接修改
/etc/rc.d/rc.local
启动脚本自动生效的功能因为修改了需要重新赋予可执行权限
再输入 <a href="http://www.php.cn/wiki/1294.html" target="_blank">chmod</a> +x /etc/rc.d/rc.local
ssh -fCNL
rrreee여기에서는 머신 B의 포트 7280과 머신 A의 포트 22를 사용했습니다. 위의 지침을 따르면 하위 작업이 완료됩니다.
ps aux | grep ssh
명령을 사용하여 확인할 수 있습니다.
🎜4. 그런 다음 B에서 작업합니다. 🎜🎜전달을 위해 B 시스템에 대한 전달 프록시를 설정합니다. 구체적인 지침은 🎜rrreee🎜입력 명령의 섹션 3을 따르세요. , 여기서 머신 B의 포트는 위의 머신 B의 포트와 일치하며 포트 1234도 머신 B의 포트입니다. 🎜rrreee🎜시작되었는지 확인하려면 ps aux | grep ssh
명령을 사용하세요. 🎜🎜🎜🎜포트 1234는 외부 네트워크와 통신하고 포트 7280으로 데이터를 전달하는 로컬 전달 포트로, 다른 시스템에서 액세스할 수 있는 기능을 구현합니다. . 동시에 * 기호는 모든 IP에서 액세스를 허용할 수 있음을 나타냅니다. 🎜🎜🎜5. 기적을 보여줄 시간입니다🎜🎜이제 AB 시스템을 구성했으므로 외부 네트워크의 컴퓨터에서 인트라넷에 로그인할 수 있습니다. 현재 컴퓨터는 내부 네트워크에 있고 서버는 외부 네트워크(즉, 구성된 B 시스템)에 있으므로 B 시스템을 통해 내부 네트워크의 A에 연결할 수 있습니다. 🎜rrreee🎜여기 - p 매개 변수는 지정된 로그인 IP입니다. 위에서는 포트 1234를 전달 포트로 지정했으므로 포트 1234를 사용하여 로그인합니다. 그러면 gdut728은 내부 네트워크에 있는 시스템 A의 사용자 이름이고 123.123.123.123은 IP 주소입니다. 외부 네트워크에 있는 머신 B의. 🎜🎜🎜🎜🎜6 이 역방향 프록시 방식은 불안정합니다 🎜🎜안타깝습니다. 이 SSH 역방향 링크는 시간 초과로 인해 닫히게 됩니다. 이 경우 외부 네트워크에서 내부 네트워크로의 채널을 유지할 수 없습니다. 따라서 안정적인 SSH 역방향 프록시를 제공하기 위한 다른 방법이 필요합니다. 🎜🎜6.1 SSH가 다시 연결될 때마다 비밀번호를 입력해야 하므로 여기서는 먼저 인트라넷에 비밀번호 없는 로그인을 설정합니다🎜🎜인트라넷의 머신 A에서 실행:🎜rrreee🎜전에 설정한 포트에 따르면, 이 명령은 다음과 같습니다 🎜rrreee🎜🎜🎜그럼 로그인하겠습니다 인트라넷의 A 머신에서 SSH를 통해 외부 네트워크의 B 머신은 비밀번호 없이 로그인이 가능합니다~autossh가 없습니다.
가 기본적으로 설치되어 있으므로 다음 명령을 사용하여 설치하세요.🎜rrreee🎜 구체적인 autossh 지침을 살펴보겠습니다. 🎜rrreee🎜 autossh
의 매개변수는 ssh의 매개변수와 동일합니다. 그러나 차이점은 터널 연결이 끊어지면 autossh가 자동으로 다시 연결되고 ssh는 만나지 않는다는 것입니다. 또 다른 차이점은 지적해야 할 -M 매개변수입니다. 이 매개변수는 외부 네트워크의 시스템 B가 내부 네트워크의 시스템 A로부터 정보를 수신하는 데 사용됩니다. 다시 연결할 수 있도록 머신 A로 반환됩니다. 🎜🎜🎜🎜🎜7 마지막으로 Linux에서 부팅 시 자동으로 autossh를 시작하도록 구성합니다. , Linux를 다시 시작한 후 autossh를 직접 시작하는 문제를 해결합니다🎜🎜입력:🎜🎜vi /etc/rc.d/rc.local
🎜🎜콘텐츠 추가:🎜🎜autossh - M 7281 - fCNR 7280:localhost:22 root@123.123.123.123
🎜🎜🎜centos7 이후에는 /etc/rc.d/rc.local
시작 스크립트를 직접 수정하면 자동으로 효과가 나타나기 때문에 수정되었으므로 실행 권한🎜🎜🎜을 다시 부여한 다음 <a href="http://www.php.cn/wiki/1294.html" target="_blank">chmod🎜을 입력해야 합니다. +x / etc/rc.d/rc.local</a>
🎜🎜🎜8. 결론: 🎜🎜🎜이 드디어 구성되었습니다. 내일 무슨 일이 일어나는지 확인하고 🎜update🎜. . 잘못된 부분 있으면 정정해주세요~🎜🎜🎜🎜다음 홈페이지를 참고하세요🎜🎜외부망에서 LAN으로 SSH 접속, 역방향 프록시 + 순방향 프록시 솔루션🎜인트라넷 침투를 위해 SSH 역터널 사용
위 내용은 SSH 역방향 프록시 및 autossh를 사용하여 외부 네트워크에서 내부 네트워크에 연결의 상세 내용입니다. 자세한 내용은 PHP 중국어 웹사이트의 기타 관련 기사를 참조하세요!