1. 程式人生 > 其它 >二十五、Webpack

二十五、Webpack

一、內網穿透介紹

內網穿透是什麼意思? - 花生殼內網穿透的回答 - 知乎 https://www.zhihu.com/question/63098230/answer/697954117

內網穿透,也即 NAT 穿透,進行 NAT 穿透是為了使具有某一個特定源 IP 地址和源埠號的資料包不被 NAT 裝置遮蔽而正確路由到內網主機。下面就相互通訊的主機在網路中與 NAT 裝置的相對位置介紹內網穿透方法。 [1]

UDP 內網穿透的實質是利用路由器上的NAT 系統。NAT 是一種將私有(保留)地址轉化為合法IP地址的轉換技術,它被廣泛應用於各種型別 Internet 接入方式和各種型別的網路中。NAT可以完成重用地址,並且對於內部的網路結構可以實現對外隱蔽。 [2]

二、frp內網穿透

frp實現內網穿透,需要在伺服器端配置frps,開放相應埠,實現一個可以提供訪問的外網ip;客戶端(樹莓派、ros機器人、windows電腦)需要配置frpc,開啟埠對應,讓本地ip和外網ip對應起來。

不管是內網穿透樹莓派、ros、windows電腦,阿里雲伺服器端的frps配置都是一樣的,需要開啟7000埠。而客戶端依照系統不同和埠的實際開放需求不同,frpc檔案都要有不同。注意客戶端的22埠都可以開放,只需要配置中session名稱(即[]中的名字)不同,以及對映到阿里雲伺服器的埠不同即可。

  • frp下載地址

frp的github下載地址:Releases · fatedier/frp (github.com)

github加速下載:下載 (serctl.com)

有時候在 github 上下載安裝包的時候需要選擇自己 CPU 的架構情況了。會提供不同作業系統的三種架構, x8632 位架構和 64 位架構,以及 arm 架構。

阿里雲伺服器(ubuntu系統)下載的是:frp_0.41.0_linux_amd64.tar.gz

樹莓派下載的是:注意是arm版本,frp_0.34.3_linux_arm

windows下載的是:frp_0.37.0_windows_amd64

ros下載的是:也是arm版本。frp_0.41.0_linux_arm.tar.gz

在linux上可以通過uname -a檢視是amd還是arm版本。如果是aarch64就是ARM架構。 下圖為ros:

  • Windows下載檔案存放位置

frp的linux_amd版本放在:D:\Program\frp\frp-linux ,該版本通常用於阿里雲伺服器

frp的windows版本放在:D:\Program\frp\frp_0.37.0_windows_amd64

frp的linux_arm版本放在:D:\Program\frp\frp-linux-arm,該版本通常用於樹莓派或者ros機器人系統

  • 相關教程

曾經的ECS伺服器,公網47.113.98.18

樹莓派使用frp實現內網穿透 | 樹莓派小無相系列 這篇成功了

https://www.jianshu.com/p/a921e85280ed

如果沒有公網ip,但又想隨時隨地都能連線到樹莓派,我們可以使用 frp 來實現。

通過代理實現在校園外使用校園網內的服務 (frp內網穿透) 這兩篇結合我成功了

https://www.cnblogs.com/FSHOU/p/12382155.html

樹莓派搭建個人伺服器

https://www.cnblogs.com/zhaopei/p/11736135.html

隨筆分類 - frp

https://www.cnblogs.com/sanduzxcvbnm/category/1171545.html

樹莓派使用frp進行內網穿透

https://www.jianshu.com/p/6eff8b8c493a

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

tar -zxvf frp_0.17.0_linux_amd64.tar.gz

cd frp_0.17.0_linux_amd64

nano frps.ini

買了一臺雲伺服器到底能幹嘛? - 藥師的回答 - 知乎 https://www.zhihu.com/question/27205559/answer/772271922

x86,x64,x86-64,amd64,arm指令集架構之間的關係 - 知乎 (zhihu.com)

三、樹莓派實現內網穿透

(一)在服務端(阿里雲伺服器ubuntu)配置frps

步驟1,到GitHub下載frp_0.34.3_linux_amd64,然後通過xftp傳送到阿里雲。注意linux下載的是amd64.wget

https://github.com/fatedier/frp/releases

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

網上有直接在linux或者樹莓派直接命令列下載的方法,但很慢不推薦。

cd /home/huang/frp

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

步驟2,找到下載的資料夾,

cd /opt#

tar -zxvf frp_0.22.0_linux_amd64.tar.gz

解壓tar -zxvf frp_0.34.3_linux_amd64.tar.gz

步驟3,可以直接用ftp進入到frp_0.34.3_linux_amd64目錄或者命令列到/home/huang/frp/frp_0.22.0_linux_amd64進行修改,找到frps.ini。注意服務端是frps,客戶端時frpc。vi frps.ini修改

步驟4,修改frps.ini 內容,儲存即可。token是自定義的,port記得在阿里雲安全組開放埠。

[common]

bind_port = 7000

token = 1234567890

5,在xshell裡面cd /opt/frp_0.34.3_linux_amd64

#請確保在 frp_0.34.3_linux_amd64 目錄下執行

./frps -c ./frps.ini

啟動frps。完成配置。

(二)在樹莓派配置frpc

1,下載frp_0.34.3_linux_arm。注意是arm不是amd64。

2,在vnc開啟/home/pi/Downloads。解壓tar -zxvf frp_0.34.3_linux_arm

3,進入frp_0.34.3_linux_arm目錄,修改frpc.ini檔案。

[common]

server_addr = 47.113.98.18

server_port = 7000

token = 1234567890

[ssh]

type = tcp

local_ip = 127.0.0.1

local_port = 22

remote_port = 6000

[vnc]           

type = tcp

local_ip = 127.0.0.1

local_port = 5900

remote_port = 6001

[camara]               

type = tcp

local_ip = 127.0.0.1

local_port = 8081

remote_port = 6003

4,在xshell中,cd /home/pi/Downloads/frp_0.34.3_linux_arm

./frpc -c ./frpc.ini

樹莓派開機自啟動frpc

https://www.cnblogs.com/hxun/p/10877828.html

frpc.service

sudo systemctl enable frpc

sudo systemctl enable frpc

sudo systemctl start frpc

檢視服務是否生效

sudo systemctl list-units |grep frpc

檢視日誌資訊 sudo systemctl status frpc

#重新整理服務列表:

systemctl daemon-reload

#設定開機自啟

systemctl enable frpc

#關閉開機自啟

systemctl disable frpc

#啟動服務

systemctl start frpc

#停止服務

systemctl stop frpc

#下載程式

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

frp進行內網穿透 給雲伺服器進行內網穿透

https://blog.csdn.net/qq_36552489/article/details/111560871?utm_medium=distribute.pc_relevant_download.none-task-blog-baidujs-2.nonecase&depth_1-utm_source=distribute.pc_relevant_download.none-task-blog-baidujs-2.nonecase

github谷歌外掛

https://github.com/XIU2/UserScript

github release檔案下載

有的時候下載一些軟體,這些軟體是放在github上的,而由於國內的github網速非常慢,所以可以採用代理的方式

github下載release檔案:https://d.serctl.com

可以使用這個網站

原來的frp

[common]

server_addr = 127.0.0.1

server_port = 7000

[ssh]

type = tcp

local_ip = 127.0.0.1

local_port = 22

remote_port = 6000

四、通過內網穿透實現ipad遠端連線windows電腦

前提條件:windows要用專業版,不然沒有遠端功能。開放電腦的3389埠,並允許遠端電腦的連線。阿里雲伺服器需要開放對應的埠的訪問許可權。ipad下一個RD client,然後,阿里雲伺服器配置好frps,windows電腦配置好frpc,之後出門開啟寢室的電腦連上路由器,並執行frpc。遠端ipad輸入阿里雲ip+埠號即可遠端訪問電腦。

(一)阿里雲伺服器配置frps

教程:https://blog.csdn.net/haofanaaa2/article/details/112710963

步驟1:下載frp的linux_amd64版本

可以用指令wget https://github.com/fatedier/frp/releases/download/v0.22.0/frp_0.22.0_linux_amd64.tar.gz實現,

或者從github下載後使用xftp上傳至伺服器,下載地址為:Releases · fatedier/frp (github.com)

步驟2:cd /home/huang/frp/frp_0.22.0_linux_amd64,解壓:tar -zxvf frp_0.22.0_linux_amd64.tar.gz

步驟3:解壓之後,我們主要需要對frps進行配置。frpc frpc.ini 這兩個檔案沒有用,是可以刪去的。

我們來配置frps.ini檔案 vi frps.ini或者在軟體xftp上直接記事本開啟。

[common]

bind_port = 7000

dashboard_port = 7001

token = 123456

dashboard_user = huang

dashboard_pwd = 123456

然後:wq退出儲存即可,之後./frps -c frps.ini就可以執行frps服務端了,螢幕顯示如下即為執行正常

步驟4:使用nohup指令使之後臺執行:nohup ./frps -c frps.ini &,因為如果Ctrl+C可將frps停止執行,因而我們需要使用 nohup命令將其執行在後臺。輸出如下內容即表示正常執行:nohup: ignoring input and appending output to 'nohup.out'。用jobs命令檢視後臺執行的程式會看到。

步驟5:伺服器端frps的配置成功之後,可以看dashboard且可以看token對應了。此時訪問x.x.x.x(你的ip地址或域名):7500輸入之前設定的dashboard_userdashboard_pwd即可訪問儀表盤介面。我的是http://8.136.195.245:7500/

(二)Windows配置frpc

步驟1:下載windows版本的frp,存放路徑為:D:\Program\frp\frp_0.37.0_windows_amd64

步驟2:在win10上需要修改配置檔案frpc.ini,網上有千奇百怪的寫法,需要依照自身的配置情況進行相應修改。

以下是一個成功的配置程式碼,token要寫token而不能寫auto_token。下面那個username 3390埠是遠端連線的配置。且需要在阿里雲開放3390埠。作用就是把預設的遠端埠的3389對映到阿里雲ip的3390埠,這樣就可以通過外網ip遠端訪問。(Windows系統自帶了遠端桌面連線【Win+R 執行,輸入mstsc 開啟】,也非常好用,系統自帶遠端服務預設埠是【3389】)

[common]
server_addr = 8.136.195.245
bind_port = 7000
token = 123456
tls_enable = true

[username]

type = tcp

local_ip = 127.0.0.1

local_port = 3389

remote_port = 3390

步驟3:儲存後在此路徑下cmd執行下.\frpc.exe -c frpc.ini,輸出為下圖即成功

D:\Program\frp\frp_0.37.0_windows_amd64\frpc.exe -c D:\Program\frp\frp_0.37.0_windows_amd64\frpc.ini

步驟4:開啟frpc功能需要聯網,通常使用室內路由器,開機自動連線wifi。 如果win10沒有寫自啟動的命令,那麼需要有人通過終端執行命令開啟frpc。這樣才能讓ipad遠端連線上win10電腦。

在電腦上先win+R,輸入cmd,在命令列輸入:

D:\Program\frp\frp_0.37.0_windows_amd64\frpc.exe -c D:\Program\frp\frp_0.37.0_windows_amd64\frpc.ini

如果出現login to server success字樣就表明成功了。

(ps:該指令我已經用記事本記錄下,放在電腦桌面,如果有需要可以讓人幫人執行下該命令。每次重啟電腦都需要重新執行該命令。)

問題:frpc客戶端連線會提示 login to server failed: EOF;解決辦法:在frpc的配置檔案加一句:tls_enable = true

(三)阿里雲ubuntu FRP 設定開機自啟動

位置是這篇說的位置/lib並不是/usr/lib

https://www.tunnelnat.com/help.html?id=19

按照下面這篇成功了

https://blog.csdn.net/weixin_34208185/article/details/88940402?utm_medium=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-3.control&depth_1-utm_source=distribute.pc_relevant.none-task-blog-BlogCommendFromBaidu-3.control

我們使用 ubuntu Linux下常用的程序管理器supervisor來管理FRP服務。

安裝systemd請執行:

apt-get update

apt-get install systemd

apt-get install systemd-sysv

# 啟動 frp 並設定開機啟動 每次開機後輸入第二條語句即可,第三條檢視狀態

systemctl enable frps

systemctl start frps

systemctl status frps

------------------------------------------------------------

linux阿里雲伺服器centos8作業系統安裝mysql8.0詳細教程

https://blog.csdn.net/qq_41688840/article/details/104699628

用navicat連線資料庫報錯:1130-host ... is not allowed to connect to this MySql server如何處理

https://blog.csdn.net/dabao87/article/details/80571877

--------------------------

一款輕量級、高效能、功能強大的內網穿透代理伺服器。支援tcp、udp、socks5、http等幾乎所有流量轉發,可用來訪問內網網站、本地支付介面除錯、ssh訪問、遠端桌面,內網dns解析、內網socks5代理等等……,並帶有功能強大的web管理端。

https://github.com/ehang-io/nps

五、ROS機器人內網穿透

ros機器人內網穿透的目的:ros機器人提供了AP模式和wifi模式,我使用的是wifi模式,這就要求電腦和ros需要連線到同一個wifi時,才能通過ssh連線到ros系統。一般情況這個共同wifi是路由器或者手機熱點。由於有時候人帶著手機出門,電腦的xshell就會斷網從而xshell的連線也就斷開了。為了讓電腦或手機的ssh工具在不連線同一個wifi的情況下,即可通過ssh工具連線到ros機器人系統中,那麼就需要內網穿透,將ros的ssh和vnc埠對映到阿里雲伺服器的外網ip埠上,我就可以直接使用外網ip連線到ros。ros機器人經常開機關機,每次重啟都需要手動執行frpc,於是有需要通過配置開機自啟動service讓frpc能夠在開機的時候自動執行。

(一)阿里雲伺服器上配置frps

步驟1:下載frp的linux_amd版本

frp下載地址:Releases · fatedier/frp (github.com)

frp的linux版本放在:D:\Program\frp\frp-linux-amd64,檔名為frp_0.41.0_linux_amd64.tar.gz

步驟2:解壓tar -zxvf frp_0.41.0_linux_amd64.tar.gz

步驟3:配置frps.ini。cd /home/huang/frp/frp_0.22.0_linux_amd64

[common]
bind_port = 7000
dashboard_port = 7001
token = 123456
dashboard_user = huang
dashboard_pwd = 123456

然後:wq退出儲存即可,之後./frps -c frps.ini就可以執行frps服務端了,螢幕顯示如下即為執行正常

步驟4:使用nohup指令使之後臺執行:nohup ./frps -c frps.ini &,因為如果Ctrl+C可將frps停止執行,因而我們需要使用 nohup命令將其執行在後臺。輸出如下內容即表示正常執行:nohup: ignoring input and appending output to 'nohup.out'。用jobs命令檢視後臺執行的程式會看到。

步驟5:伺服器端frps的配置成功之後,可以看dashboard且可以看token對應了。此時訪問x.x.x.x(你的ip地址或域名):7500輸入之前設定的dashboard_userdashboard_pwd即可訪問儀表盤介面。我的是frps dashboard

檢視某個端口占用:netstat -ap | grep 7001

frp用一個伺服器程序frps連線多個客戶端frpc - wangyuyu - 部落格園 (cnblogs.com)

(二)ROS機器人系統中配置frpc

步驟1:下載frp的linux_arm版本。

github上的下載路徑為:https://github.com/fatedier/frp/releases/download/v0.41.0/frp_0.41.0_linux_arm.tar.gz

電腦端的已下載檔案的存放路徑:D:\Program\frp\frp-linux-arm,檔名為frp_0.41.0_linux_arm.tar.gz

機器人端的存放路徑為:cd /home/bingda/hrobot/frp

步驟2:解壓 tar -zxvf frp_0.41.0_linux_arm.tar.gz

步驟3:配置frps。cd /home/bingda/hrobot/frp/frp_0.41.0_linux_arm,tls_enable = true是為了解決登入eof的問題(一開始是在ipad遠端連線win10報錯),login_fail_exit = false。11311是預設的app控制埠,對映到7004.

[common]
server_addr = 42.192.80.10
bind_port = 7000  
token = 123456 
tls_enable = true 
login_fail_exit = false

[ssh_robot]
type = tcp
local_ip = 127.0.0.1
local_port = 22
remote_port = 7002

[vnc_ros]
type = tcp
local_ip = 127.0.0.1
local_port = 4000
remote_port = 7003

[app_control]
type = tcp
local_ip = 127.0.0.1
local_port = 11311
remote_port = 7004


步驟4:在xshell中,cd /home/bingda/hrobot/frp/frp_0.41.0_linux_arm

輸入命令./frpc -c ./frpc.ini

nohup ./frpc -c ./frpc.ini &

(三)ROS機器人中讓frpc開機自啟動

樹莓派4B 開機自啟實現Frpc 內網穿透連線,linux延時啟動服務詳細介紹實現_-CSDN部落格

步驟1: Ubuntu 18 不再使用initd管理系統,而是使用systemd。新建一個service用於開啟frpc服務。

cd /etc/systemd/system
sudo touch rosfrpc.service
sudo vim rosfrpc.service

以下為rosfrpc.service的內容
[Unit]
Description=rosfrp
After=network.target
Wants=network.target

[Service]
TimeoutStartSec= 30
ExecStart=/home/bingda/hrobot/frp/frp_0.41.0_linux_arm/frpc -c /home/bingda/hrobot/frp/frp_0.41.0_linux_arm/frpc.ini
Restart=1

[Install]
WantedBy=multi-user.target

After=network.target和Wants=network.target意思是這個服務在網路環境下啟動,然而測試發現並沒有什麼用。

步驟2:開啟、關閉、重啟service的相關指令,以及檢視service執行狀態的指令。

sudo service rosfrpc start     啟動service。輸入該指令後還需輸入密碼
sudo service rosfrpc stop  
sudo service xxx status
sudo service rosfrpc restart
sudo systemctl start rosfrpc.service   啟用service的另一種指令

systemctl status rosfrpc.service    檢視service執行狀態。當執行出現錯誤,可以用該指令檢視何處出錯
service rosfrpc status  檢視service執行狀態

如果執行成功,會顯示為active。

步驟3:啟動frpc的service服務寫好後,我們自己手輸命令是能夠成功執行的。但是這樣就需要每次開機都手動輸一次命令,較為繁瑣。因此可以通過sudo systemctl enable rosfrpc.service讓該service開機自啟動。

步驟4:正常而言,到步驟3已經完成frpc的開機自啟動。因為我的ros機器人是設定了開機自動連線手機熱點,只有當機器人聯網後,我才通過xshell輸入外網ip進入ros機器人系統中。這是因為我經常讓ros機器人使用我的手機熱點,其連線速度很快。

(特殊情況,是我從樹莓派內網穿透那邊得到的經驗,由於要成功開啟frpc服務需要ros機器人先聯網,所以開機時熱點未連上,就先開啟了service服務,那麼自啟動服務就無法生效。網上的解決辦法是再寫一個指令碼,讓ros系統延遲60s再開啟service服務。依照2022年4月7日的情況,我覺得應該是配置到步驟3即可完成。為了以後出問題有得查詢,特此做了記錄。)

cd /home/bingda/hrobot/frp/frp_0.41.0_linux_arm
touch delaystartfrpc.sh
sudo vim delaystartfrpc.sh

以下為指令碼內容,就兩行

sleep 60
service rosfrpc start

sudo service --status-all  檢視全部服務列表
systemctl reboot   重啟機器

修改指定位置檔案sudo vim /etc/rc.local,新增我們的命令,注意位置,在exit 0前面的命令都會被順次執行。
_IP=$(hostname -I)||true
if["$_IP"]; then
  printf "My IP address is %s\n" "$_IP"
fi
/home/bingda/hrobot/frp/frp_0.41.0_linux_arm/delaystartfrpc.sh
exit 0

(四)問題處理

2022.04.06 我用自己的阿里雲伺服器跑frps出現了bug,無法成功執行,而我在去年用同樣的命令成功了,可能是期間伺服器到期又續費造成的一些問題,之後有時間再排查。而同樣的frps配置,在同學的騰訊雲伺服器上可以執行,說明配置檔案本身沒問題,確實是我的伺服器出了意外。

同學ip:42.192.80.10

cd /root/frp/frp_0.41.0_linux_amd64

2022.04.06

ipad遠端連線windows時,windows開啟frpc服務時報EOF錯誤,可以在frpc.ini檔案中的[common]中新增一句tls_enable = true。

2022.04.14解決問題

解決:阿里雲伺服器新增安全組埠對映後仍無法訪問_wshanshi的部落格-CSDN部落格_阿里雲配置安全組還是無法訪問的

阿里雲開放埠後,外部還無法訪問,問題就在於沒有開放防火牆。

firewall-cmd --list-all

firewall-cmd --zone=public --add-port=7500/tcp --permanent 開放某個埠

firewall-cmd --reload 重新啟用防火牆

新增之後,我的frp的dashboard就可以正常啟用了。

在Ubuntu 18.04/Ubuntu 16.04上安裝Firewalld的方法

在Ubuntu 18.04/16.04系統上安裝和使用Firewalld的方法_Linux安全_雲網牛站 (ywnz.com)

Ubuntu系統的預設防火牆系統是ufw(參考:在Ubuntu 18.04系統中使用UFW設定防火牆),但是可以安裝和使用Firewalld,Firewalld對我來說很好,因為我以前是一個CentOS 7使用者。

通過執行命令在Ubuntu 18.04/Ubuntu 16.04上安裝Firewalld:

sudo apt-get install firewalld

預設情況下,應該啟動服務,如果沒有執行,則啟動並啟用它以在啟動時啟動:

sudo systemctl enable firewalld

sudo systemctl start firewalld

確認該服務正在執行:

$ sudo firewall-cmd --state

running

如果已啟用ufw,請將其禁用以使firewalld成為你的預設防火牆:

sudo ufw disable