Ubuntu18.04.2LTS配置vnc+frp內網穿透實現桌面遠程訪問

之前使用Teamviewer來遠程電腦,更新之后老是提示被商用,無奈,尋求其他方案如anyDesk、向日葵遠程控制、splashtop、VNC。

frp項目地址:https://github.com/fatedier/frp
frp 是一個可用于內網穿透的高性能的反向代理應用,支持 tcp, udp,http 和 https協議。
VNC,全稱為Virtual Network Computing,它是一個桌面共享系統。功能,類似于windows中的遠程桌面功能。VNC與Windows遠程桌面一樣是使用RFB(Remote FrameBuffer,遠程幀緩沖)協議來實現遠程控制另外一臺計算機。

目的

本文介紹的是在Ubuntu 18.04.2LTS Bionic Beaver上開啟VNC服務端并frp穿透內網實現遠程桌面共享。

環境

  • 操作系統 Ubuntu 18.04.2LTS Bionic Beaver(x86_64)
  • 云服務器(公網ip地址)

注意事項

  • # -要求使用root權限直接以root用戶使用命令或對執行的命令使用linux sudo
  • $ -要求給定的linux命令作為常規非特權用戶執行

Step 1 啟用遠程桌面共享

首先查看下Ubuntu系統上是否安裝遠程桌面共享,沒有的話就執行安裝:

$ sudo apt update && sudo apt install -y vino
desktop sharing

使用Activities菜單搜索Sharing可以在Settings部分看到選項,直接打開它,或者以命令行的方式打開

$ gnome-control-center sharing
Sharing

單擊Screen Sharing以開始遠程桌面配置

將開關打開為ON,可以選擇設置密碼并記住你設置的密碼,后面連接的時候要用密碼。

Allow connections to control the screen選項使遠程用戶能夠主動與遠程桌面交互。如果未選中此選項,則遠程桌面會話將設置為只讀。

啟用Ubuntu的遠程桌面功能后,可以看到系統正在偵聽端口5900

如果您啟用了UFW防火墻,請打開5900端口

類似于:

$ sudo ufw allow from any to any port 5900 proto tcp
Rule added
Rule added (v6)

Step 2 建立遠程桌面連接

我們將在Ubuntu 18.04系統上使用Remmina遠程桌面客戶端,如果沒有先安裝一個,打開Ubuntu Software搜索remmina安裝或者命令行方式安裝:

$ sudo apt install remmina

使用Activities菜單搜索并啟動Remmina遠程桌面客戶端或運行命令行

$ remmina

從下拉菜單中選擇協議VNC,然后輸入Ubuntu遠程桌面系統的主機名或IP地址,按下Enter鍵即可連接.

輸入前面設置的密碼確認連接。

連接成功,是這個樣子。

遠程桌面共享連接成功。你也可以使用Remmina面板進一步調整遠程桌面連接設置。

好了,到了這一步已經確認我們Ubuntu18.04系統的桌面共享服務已經安裝好了。這意味著你將可以與你局域網內的機器實現桌面共享,接下來,使用frp實現內網穿透,對外網提供服務,隨時隨地可以使用網絡遠程桌面到Ubuntu 18.04。

Step 3 配置frp實現內網穿透

首先下載frp二進制文件 https://github.com/fatedier/frp/releases
根據處理器架構選擇對應壓縮包

  • Windows 64位 :frp_版本號_windows_amd64.zip
  • Windows 32位:frp_版本號_windows_386.zip
  • Linux 64位:frp_版本號_linux_amd64.tar.gz
  • Linux 32位:frp_版本號_linux_386.tar.gz

注意:從0.18.0版本開始,新版與舊版不兼容,并且部分配置字段不同。請確保服務端和客戶端使用同一版本。

下載程序

我這里云服務器和Ubuntu18.04都是x86_64架構的,所以我下載linux_amd64的壓縮包

下面以x84_64處理器架構舉例, 此時frp 最新版是v0.27.0

# 查看cpu架構
arch
# 創建frp文件夾并進入
mkdir frp && cd frp
# 下載
wget -q -c --no-check-certificate https://github.com/fatedier/frp/releases/download/v0.27.0/frp_0.27.0_linux_amd64.tar.gz
# 解壓
tar -xzvf frp_0.27.0_linux_amd64.tar.gz
# 進入文件夾
cd frp_0.27.0_linux_amd64
# 確保 frps 程序具有可執行權限
chmod +x frps
# 運行
./frps --help

如果有報錯 -bash: ./frps: cannot execute binary file: Exec format error就說明你下錯版本

配置程序

服務端配置參考frps_full.ini
客戶端配置參考frpc_full.ini

服務端 -frps.ini

# 下面這句開頭必須要有,表示配置的開始
[common]

# frp 服務端端口(必須)
bind_port = 7000

# frp 服務端密碼(必須)
token = 12345678

# 認證超時時間,由于時間戳會被用于加密認證,防止報文劫持后被他人利用
# 因此服務端與客戶端所在機器的時間差不能超過這個時間(秒)
# 默認為900秒,即15分鐘,如果設置成0就不會對報文時間戳進行超時驗證
authentication_timeout = 900

# 儀表盤端口,只有設置了才能使用儀表盤(即后臺)
dashboard_port = 7500

# 儀表盤訪問的用戶名密碼,如果不設置,則默認都是 admin
dashboard_user = admin
dashboard_pwd = admin

# 如果你想要用 frp 穿透訪問內網中的網站(例如路由器設置頁面)
# 則必須要設置以下兩個監聽端口,不設置則不會開啟這項功能
vhost_http_port = 10080
vhost_https_port = 10443

# 此設置需要配合客戶端設置,僅在穿透到內網中的 http 或 https 時有用(可選)
# 假設此項設置為 example.com,客戶端配置 http 時將 subdomain 設置為 test,
# 則你將 test.example.com 解析到服務端后,可以使用此域名來訪問客戶端對應的 http
subdomain_host = example.com

這是我的服務端-frps.ini的配置

[common]
bind_port = 7000
token = 12345678
authentication_timeout = 900
dashboard_port = 7500
dashboard_user = admin
dashboard_pwd = admin
vhost_http_port = 8080
subdomain_host = example.com
max_pool_count = 10
log_file = ./frps.log
log_level = info
log_max_days = 3

客戶端 -frpc.ini

############################################
# 基本配置(必須)
# 下面這句開頭必須要有,表示配置的開始
############################################
[common]
# frp 服務端地址,可以填ip或者域名
server_addr = 0.0.0.0
# frp 服務端端口,即填寫服務端配置中的 bind_port
server_port = 7000
# 填寫 frp 服務端密碼
token = 12345678

###########################################
# 轉發 ssh 
# 自定義一個配置名稱,格式為“[名稱]”,放在開頭
###########################################
[ssh]
# 連接類型,填 tcp 或 udp
type = tcp

# 本地ip,填你需要轉發到的目的ip
# 如果是轉發到frp客戶端所在本機(比如路由器)則填 127.0.0.1
# 否則填對應機器的內網ip
local_ip = 127.0.0.1
# 需要轉發到的端口,比如 ssh 端口是 22
local_port = 22

# 是否加密客戶端與服務端之間的通信,默認是 false
use_encryption = false
# 是否壓縮客戶端與服務端之間的通信,默認是 false
# 壓縮可以節省流量,但需要消耗 CPU 資源
# 加密自然也會消耗 CPU 資源,但是不大
use_compression = false

# frp 服務端的遠程監聽端口,即你訪問服務端的 remote_port 就相當于訪問
# 客戶端的 local_port,如果填0則會隨機分配一個端口
remote_port = 6001

###########################################
# 轉發HTTP(s)
# 自定義一個配置名稱,格式為“[名稱]”,放在開頭
###########################################
[router-web]
# 連接類型,填 http 或 https
type = http

local_ip = 127.0.0.1
local_port = 80

# http 可以考慮加密和壓縮一下
use_encryption = true
use_compression = true

# 自定義訪問網站的用戶名和密碼,如果不定義的話誰都可以訪問,會不安全
# 有些路由器如果從內部訪問web是不需要用戶名密碼的,因此需要在這里加一層密碼保護
# 如果你發現不加這個密碼保護,路由器配置頁面原本的用戶認證能正常生效的話,可以不加
http_user = admin
http_pwd = admin

# 還記得我們在服務端配置的 subdomain_host = example.com 嗎
# 假設這里我們填 web01,那么你將 web01.example.com 解析到服務端ip后
# 你就可以使用 域名:端口 來訪問你的 http 了
# 這個域名的作用是用來區分不同的 http,因為你可以配置多個這樣的配置
subdomain = web01

# 自定義域名,這個不同于 subdomain,你可以設置與 subdomain_host 無關的其他域名
# subdomain 與 custom_domains 中至少有一個必須要設置
custom_domains = web02.yourdomain.com

# 匹配路徑,可以設置多個,用逗號分隔,比如你設置 locations 為以下這個,
# 那么所有 http://xxx/abc 和 http://xxx/def 都會被轉發到 http://xxx/
# 如果不需要這個功能可以不寫這項,就直接該怎么訪問就怎么訪問
locations = /abc,/def

# 重寫 host header,相當于反向代理中的“發送域名”
# 如果設置了,轉發 http 時,請求中的 host 會被替換成這個
# 一般情況下不需要用到這個,可以不寫這項
host_header_rewrite = dev.yourdomain.com

##############################################
# TCP/UDP 范圍轉發
# 自定義一個配置名稱,格式為“[range:名稱]”,放在開頭
##############################################
[range:multi-port]

type = tcp
local_ip = 127.0.0.1
use_encryption = false
use_compression = false

# 本地端口和遠程端口可以指定多個范圍,如下格式,且范圍之間必須一一對應
local_port = 6010-6020,6022,6024-6028
remote_port = 16010-16020,16022,16024-16028

這是我的客戶端-frpc.ini的配置

[common]
server_addr = example.com
server_port = 7000
token = 12345678

[web]
type = http
local_ip = 192.168.103.145
local_port = 80
custom_domains = example.com

[RDP]
type = tcp
local_ip = 192.168.103.145
local_port = 5900
remote_port = 5900

服務器端運行啟動

$ nohup /root/frp/frps -c /root/frp/frps.ini &

客戶端(Ubuntu18.04)啟動

$ nohup /home/xmaihh/frp/frpc -c /home/xmaihh/frp/frpc.ini &

停止

$ pkill frps   或者 pkill frpc

云服務器注意放行相關端口.

開機啟動

自啟動可以修改/etc/rc.local文件,加入啟動命令
或者其他系統自行設置。

#!/bin/sh -e
#
# rc.local
#
# This script is executed at the end of each multiuser runlevel.
# Make sure that the script will "exit 0" on success or any other
# value on error.
#
# In order to enable or disable this script just change the execution
# bits.
#
# By default this script does nothing.
#nohup socat TCP4-LISTEN:4443,reuseaddr,fork TCP4:192.168.103.145:8123 >> /root/socat.log 2>&1 &
#nohup socat UDP4-LISTEN:4443,reuseaddr,fork UDP4:192.168.103.145:8123 >> /root/socat.log 2>&1 &
nohup /root/frp/frps -c /root/frp/frps.ini &
exit 0

建立遠程連

請注意remote_port = 5900我把Ubuntu18.04的VNC Sharing端口5900映射到云服務器的5900端口,建立連接時,連接你的服務器+服務器端口號

這里我使用手機開數據網絡,關閉WIFi,下載VNC Viewer客戶端來一下遠程連接。

打開手機VNC Viewer,點擊+,在Address處填入 ip+端口形式 xxx.xxx.xxx.xxx::5900或者 域名+端口形式 example.com::5900

點擊進行下一步輸入密碼以看到畫面了。

Issues

No matching security types

VNC客戶端不支持加密。任何連接到遠程桌面共享服務器的嘗試都將導致No matching security types錯誤

如果遇到這個錯誤,請按照以下步驟解決:

  1. 安裝dconf工具
$ sudo apt-get install dconf-tools
  1. 打開dconf-editor
$ dconf-editor

依次切換到org->gnome->desktop->remote-access并將require-encryption項目關閉。

  1. 執行
$ gsettings set org.gnome.Vino require-encryption false

如果輸出警告:GLib-GIO-Message: 10:19:43.137: Using the 'memory' GSettings backend. Your settings will not be saved or shared with other applications.
可以先執行export GIO_EXTRA_MODULES=/usr/lib/x86_64-linux-gnu/gio/modules/然后再執行3。

  1. 確認已禁用遠程服務器上的加密
$ gsettings list-recursively org.gnome.Vino | grep encrypt 

Reference

How To Enable Desktop Sharing In Ubuntu and Linux Mint
內網穿透神器搭建 萌新也看得懂的教程系列

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 229,517評論 6 539
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 99,087評論 3 423
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 177,521評論 0 382
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,493評論 1 316
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 72,207評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,603評論 1 325
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,624評論 3 444
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,813評論 0 289
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 49,364評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 41,110評論 3 356
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 43,305評論 1 371
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,874評論 5 362
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,532評論 3 348
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,953評論 0 28
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 36,209評論 1 291
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 52,033評論 3 396
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 48,268評論 2 375