遠端跳板機搭建——內網穿透

zxcxylong發表於2021-01-04

前言

之前工作中搭建過遠端跳板機,就是通過一臺阿里雲虛機,通過他的公網地址指定埠號來訪問公司內部的環境,可以進行直接登入,最近換了一個工作環境他們也是通過阿里雲虛機來實現遠端訪問,實現方法和我使用的不同,所以記錄下。

一、介紹

遠端跳板機搭建使用的場景就是本身環境是沒有外部網路的或者是因為安全原因不能直接連線外網,那麼我們就可以拿出一臺伺服器或者筆記本,它可以登入內部的環境然後配置上外網,然後準備一臺外網的虛機,開放虛機的埠【10022】將外網虛機和本地的伺服器進行網路設定,這樣我們就可以通過虛機IP:10022直接登入到內部的機器上了。

實現方法現在是三種:

  • 通過ssh命令實現反向地址解析,通過一條命令就可以實現;
  • 也是通過ssh的命令來進行實現;
  • 通過frp服務來實現;

環境準備:

我使用的本地就是自己的一臺虛機,然後通過青雲買了一臺外網的ECS虛機,

RoleOSIP
本地機器centos7.6192.168.144.10
青雲RCS虛機centos7.6139.198.9.32

接著開啟青雲虛機的埠(開啟10022-10024埠)
在這裡插入圖片描述

二、實現方法

方法一:

第一種方法只需要在本地的機器上執行就好,外網的虛擬機器需要開啟埠10022然後允許訪問就好了,說白了就是建立一個祕鑰然後執行一條命令的事情,這樣我們就可以通過虛機IP:10022來訪問到本地的機器了。

首先在虛機上將埠開啟,【環境配置】

接著在本地機器上建立一個金鑰對,

ssh-keygen 
ll ~/.ssh/id_rsa
ll ~/.ssh/id_rsa.pub

在這裡插入圖片描述

接著將生成祕鑰的公鑰複製放到外網虛機的主機解析檔案中

ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQD6Mtst3k/6qdkIkpMeTqe106SZJ08AUDnNNHc8hKVETY9OIDr/ktYg4hid7O5JM6zWjn5v6jg8OkLjhsIegkbc0hcQTsoJZzC358hP365YhqHfutT09P6CSnsov2jhu7KtNZPBoOh2z0KxI3w9aBNXhoj7bcgpjAA8e3nS7q7TPPkPBK2yQHnjlfBXbdWDuGIRrb9c+5G4oso2/k8jd+QyDGHP55GcKQOkJSaGudeY28UnzDJwOULVpMi//vEsmUwYa21FLiDpvDPcQZ0N8DTSHM+Yf07d+HtMuILNdEPC8AaC0mQWHZ/OgOc0/ZMt7jqiOhoRgCbbGsIK/2q0I+9x root@vlinx144010.com

在這裡插入圖片描述

ll ~/.ssh/authorized_keys 
vim ~/.ssh/authorized_keys
cat ~/.ssh/authorized_keys

在這裡插入圖片描述

接著還是在外網虛機上對ssh服務進行一定的配置

vim /etc/ssh/sshd_config 

#GatewayPorts no
GatewayPorts yes

systemctl restart sshd

在這裡插入圖片描述
在這裡插入圖片描述

接著回到本地的機器上執行命令

ssh -qTfnN -R 10022:192.168.144.10:22 -i ~/.ssh/id_rsa -o PreferredAuthentications=publickey -oServerAliveInterval=60 root@139.198.9.32

-R 10022埠是外網虛機開放的埠,我們訪問的時候也會用到;192.168.144.10的ip是本地的地址

root@139.198.9.32 這是我們外網虛機的公網地址

在這裡插入圖片描述
接著我們可以通過xshell建立session指定ip地址是外網虛機的+埠是我們指定的10022
在這裡插入圖片描述

這時候發現無法連線了,這就尷尬了,外網虛機上放通埠的時候是10022-10024,

在這裡插入圖片描述

我可以在新增一個命令將10023加上去

ssh -qTfnN -R 10023:192.168.144.10:22 -i ~/.ssh/id_rsa -o PreferredAuthentications=publickey -oServerAliveInterval=60 root@139.198.9.32

在這裡插入圖片描述
修改下shell中session的埠號

在這裡插入圖片描述
這時候在連線就沒問題的,直接就登入到我本地的機器上了,

在這裡插入圖片描述

總結:

  • 這種方式優點,配置簡單,一個祕鑰一條命令就可以從外網通過埠來訪問本地的機器了。
  • 缺點就是對網路依賴大,如果本地的網路中斷那麼你外面訪問也會中斷,還有就是訪問次數的限制,如果訪問的人數多也會導致連線出問題。

方法二:

方法二安裝的過程比方法一更加簡單隻需要安裝一個autossh軟體就可以了,然後通過執行命令指定之後就可以進行連線了,

首先還是外網虛機需要放通10022埠【環境配置】

接著本地伺服器上安裝軟體

yum search autossh
yum install -y authssh

在這裡插入圖片描述

接著執行命令

autossh -M 12345  -TfN -R  10022:192.168.144.10:22 root@139.198.9.32

在這裡插入圖片描述

引數解釋:

​ -M 12345 ,-M後面指定的是埠,監控這個連線如果斷了會進行重新連線

​ -f ,後臺執行ssh指令

​ -C,允許壓縮資料

​ -N,不執行遠端指令

​ -R,將外網虛機的埠轉發到本地的埠

​ -L,將本地機器的某個埠轉發到遠端機器的埠

​ -p,指定遠端主機的埠

這時候我們通過shell建立session來連線就可以到本地的機器了
在這裡插入圖片描述
在這裡插入圖片描述

總結:

  • 這種方式優點還是配置簡單,安裝一個軟體,執行一個命令,就可以成立;
  • 缺點話通過命令指定,如果網路波動或者是訪問使用者過多都會影響訪問的質量;

方法三:【推薦】

方法三是通過兩個軟體來實現的xinetd來開放埠,接著frpc來實現鏈路的建立

frpc官方文件

參考文件

1、介紹

frp是一個專注於內網穿透的高效能的反向代理應用,支援TCP、UDP、HTTP、HTTPS的多種協議。可以將內網服務以安全、便捷的方式通過具有公網IP節點的中轉暴露到公網。

frp = 【服務端】frps放到外網主機+ 【客戶端】frpc放到內網主機,伺服器端就是外網主機一般都是具有公網IP的機器上,客戶端通常部署在需要穿透的內網伺服器上面。

內網由於沒有公網IP所以不能被非區域網的其他使用者訪問,使用者需要通過訪問frps,由frp將請求的埠或者其他資訊將請求的路由到對應的內網機器上去,從而實現通訊。

2、環境描述

​ 準備兩臺機器,一臺是青雲建立的虛機 + 一臺是本地Vmware建立的虛機,

​ ——》青雲的機器就是帶著外網的虛機作為【服務端】安裝【frps】

​ ——》本地的Vmware虛機就是作為公司內部環境的伺服器或者是跳板機

3、下載軟體

  • 可以直接登入到GitHub上面下載

    PS:到頁面上可以看到不同的版本的軟體,freebsd的、Linux的、arm架構的、windows的、原始碼的,根據自己的環境來進行選擇

  • 直接通過wget下載:

wget https://github.com/fatedier/frp/releases/download/v0.34.3/frp_0.34.3_linux_amd64.tar.gz 

4、服務端frps

4.1、檢視下載的壓縮包,有8.2M還可以不是太大
在這裡插入圖片描述
4.2、解壓tar包然後進入編輯配置檔案

注意,確定要編輯的是frps還是frpc,這兩個配置檔案都是在一起的,——》我這是服務端那就是frps.ini

tar -xf frp_0.34.3_linux_amd64.tar.gz 
cd frp_0.34.3_linux_amd64/
vim frps.ini 

在這裡插入圖片描述
4.3、配置server端內容

[common]
#frp監聽埠,預設時7000,可以修改,這裡修改了在frpc.ini中也是要修改的,
bind_port = 7000
#授權碼,就是frps和frpc進行驗證的內容,兩個配置檔案必須編寫相同,如果是生產環境複雜點,我這隨便
token = 12345678

#frp管理後臺埠,根據自己需求修改;frp提供了一個web頁面我們可以通過公網IP:7500來進行訪問,可以改可不改
dashboard_port = 7500

#frp管理後臺使用者名稱和密碼,就是登陸管理後臺的方式,生產環境修改的複雜點,我這隨便
dashboard_user = admin
dashboard_pwd = admin
enable_promethes = true

#frp日誌的配置(位置、級別、最大存放時間)
log_file = /var/log/frps.log
log_level = info
log_max_days = 3

4.4、設定和啟動frp服務

#建立frp服務家目錄
mkdir -p /etc/frp
#將主配置檔案、執行檔案、啟動檔案複製到指定位置,這裡或者使用ln -s做成軟連線也是可以的
cp /root/frp_0.34.3_linux_amd64/frps.ini /etc/frp
cp /root/frp_0.34.3_linux_amd64/frps /usr/bin/
cp /root/frp_0.34.3_linux_amd64/systemd/frps.service /usr/lib/systemd/system/
#啟動服務檢視狀態
systemctl enable --now frps
systemctl status frps

在這裡插入圖片描述

4.5、防火牆設定

如果系統開啟防火牆的話需要將後臺管理的埠放開,但是我使用的青雲的虛機,直接在安全組中配置就好了,作業系統中不用對防火牆進行操作

在這裡插入圖片描述

4.6、青雲虛機開啟對應的埠

在這裡插入圖片描述

這時候在本地通過公網IP:7500登入頁面,輸入frps.ini配置檔案中設定的使用者名稱密碼就可以看到frp的後臺管理頁面了,

http://139.198.9.32:7500

在這裡插入圖片描述

我們現在只配置服務端所以啥都沒得,
在這裡插入圖片描述

5、客戶端ftpc

5.1、上傳frp的壓縮包

我們可以下載好了通過xshell上傳或者是通過wget下載

wget https://github.com/fatedier/frp/releases/download/v0.34.3/frp_0.34.3_linux_amd64.tar.gz

在這裡插入圖片描述
5.2、解壓tar包然後進入編輯配置檔案

tar -xf frp_0.34.3_linux_amd64.tar.gz 
cd frp_0.34.3_linux_amd64/
vim frpc.ini 

在這裡插入圖片描述

5.3、配置client端內容

[common]
#服務端配置(公網IP地址、服務端監聽埠號、授權碼),和服務端對應
server_addr = 139.198.9.32
server_port = 7000
token = 12345678

#配置ssh服務,就是遠端連線用的還是ssh服務
[ssh]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 10022		#這個埠是我們青雲虛機上放通的埠

#配置http服務,可以用於小程式開發、遠端除錯,我現在是內網穿透,沒啥用
[web]
type = http
local_ip = 127.0.0.1
local_prot = 8080
subdomain = test.hi.jk.pw
remote_port = 10023

在這裡插入圖片描述

5.4、防火牆
如果系統開啟了防火牆那麼就需要將配置檔案中的埠進行放通,我這裡防火牆是關閉的,不用設定

在這裡插入圖片描述

6、連線

在客戶端的frpc啟動之後可以到frps的頁面上檢視下,已經多了一個我們設定的埠了,

在這裡插入圖片描述

在xshell上建立session進行連線

在這裡插入圖片描述

這時候可以正常登入就沒有問題了
在這裡插入圖片描述

7、擴充套件——多ssh

內網穿透就是為了讓我們可以通過一個對外的IP來訪問公司內網的環境,使用遠端的連線方式不止一套環境或者是不止一個主機,這種情況下怎麼辦?——》首先在服務端,暴露更多的埠;然後在客戶端的frpc.ini中編寫更多的【ssh】就可以了。

PS:【ssh】中括號中的內容可以自己寫,隨便寫,按照自己的環境名來進行編寫。

[vlinx144010]
type = tcp
local_ip = 192.168.144.10
local_port = 22
remote_port = 10023			#外網主機開啟的埠

在這裡插入圖片描述
修改配置檔案重啟下服務

systemctl restart frpc.service 

在這裡插入圖片描述

我們可以在frp的dashboard上面進行檢視就發現多了一個,這裡顯示的name和我們配置的相同,

在這裡插入圖片描述

總結:

​ 通過frp軟體實現內網穿透的方式,和上面兩種比起來的話配置還是多了很多的,但是執行起來的話還是比一個命令安全、穩定很多的,好歹是一個應用程式,而且frp方式多埠的時候只需要修改配置檔案重啟服務生效就可以了,如果是上面的方法那就是需要一個埠對應執行一條命令,命令的執行還是不太穩定的,如果開放的埠量級比較大,十個、二十個的時候,還是frp這種修改配置檔案的方式方便些。

相關文章