作者:琪米 時間:2018-6-20
#引言作為一個合格的程式設計師,加班就已經成為常態。但是有時候已經下班回到家並且這個時候上頭一個電話來說要修改Bug,就很讓人崩潰。不得不強打起精神往公司的方向走去,往往這個時候我都會去想我直接連回去公司就好啦,為什麼還要跑去公司?但是公司的網路並不對外開放,外面無法連線進去公司的網路。經過我多方面的研究和調查,終於發現了一個內網穿透的方案,經過實測很穩定和實用。 #正文 好了,廢話就講完了接下來正式進入正題。作為程式設計師都知道一個事實,想要通過網際網路連上一臺機器是需要哪個機器有一個公網的ip,然而很多時候個人或者公司拉的網線都是內網的ip,所以家裡的電腦基本是連線不上去公司的內網。那麼我們想要家裡的電腦連線上公司的內網或者公司工作的電腦應該怎麼辦好。前面已經講過,想要連線上需要一個公網的ip,那麼我們給它一個ip不就行了?事實上直接給個公網ip也是不可行的,但是我們可以取巧。我這個取巧的方法理論上是這樣的,搞一臺公網Ip的伺服器,然後公司內網的電腦連線上這個公網ip的伺服器,家裡的電腦也連線上這個公網ip的伺服器。通過這個公網的伺服器做橋接,把家裡的電腦和公司的電腦連線起來這樣就可以實現內網的穿透啦。為了方便理解我畫了一張圖(圖1):
網路穿透大概的網路拓撲如上圖1所示。 #1.準備一臺有公網ip的Linux伺服器或者vps,frps伺服器端和客戶端,openvpn客戶端,putty的Linux的遠端工具,windows平臺的spiped資料混淆工具(需要自己編譯為了減少難度我已經編譯好一個可執行檔案,文章末尾放下工具包下載連線)
a.使用putty連線上你的伺服器,然後下載frps服務端軟體下載地址為github.com/fatedier/fr…,選擇一個適合的版本然後使用wget命令下載
wget https://github.com/fatedier/frp/releases/download/v0.20.0/frp_0.20.0_linux_386.tar.gz
複製程式碼
下載完後 解壓
tar -zxvf frp_0.20.0_linux_386.tar.gz
複製程式碼
cd進入/etc資料夾建立一個frps.ini配置檔案
[common] 必須設定
bind_port = 8443 設定spiped對映埠號
server_port = 3388 設定轉發伺服器監聽埠號
privilege_mode = true 設定私有模式
privilege_token = demodemo 設定私有模式token ps:我這裡的demodemo只為了說明,可以任意設定
max_pool_count = 50
複製程式碼
cd 進入frp_0.20.0_linux_386資料夾 使用以下命令啟動服務端
./frps -c /etc/frps.ini
複製程式碼
b.下載Windows版本的openvpn安裝包,下載地址為https://openvpn.net/index.php/open-source/downloads.html實測openvpn下載地址由於國內某些原因無法開啟需要科學上網,對於不能夠科學上網的孩童文章末尾我會給出一個已經配置好的工具包包含openvpn安裝包在內點選這裡下載。
c.下載putty的luinx遠端工具,主要用來遠端登入伺服器安裝frp服務,安照a步驟即可
b.編譯spiped windows版本,鑑於複雜情況我已經編譯完,放在了文章末尾的工具包裡面。要是小夥伴們想自己嘗試下可以去這個網址https://gitlab.com/spiped/spiped研究,使用命令也有說明。
#2.編寫公司辦公室區域網客戶端配置
a.下載windows版本的frps下載連線為github.com/fatedier/fr…,編寫frpc.ini配置:
[common] 必須設定
server_addr = 127.0.0.1 設定公網伺服器ip地址
server_port = 8443 設定伺服器遠端spiped對映埠號
privilege_token = demodemo 設定私有模式token ps:我這裡的demodemo只為了說明,可以任意設定但是要和伺服器的privilege_token對應起來,可以理解為密碼
[openvpn] 可隨意命名
privilege_mode = true
remote_port = 3388 設定遠端埠
type = tcp 使用tcp協議進行連線
local_port = 1195 本地監聽埠
複製程式碼
b.在windows電腦上配置一張tap模式的虛擬網路卡
1.開啟裝置管理器點選操作按鈕選擇新增過時硬體選項:
2.選擇安裝我手動從列表選擇硬體: 3.選擇新增網路介面卡: 4.選擇TAP-Windows Provider V9:5.開啟網路介面卡會看到一張新建的虛擬網路卡,把名字改為server,下面的配置檔案有用到。
6.把server虛擬網路卡和本地上網的乙太網卡使用網橋橋接起來,用滑鼠選中兩張網路卡然後右擊選擇橋接選項。c.編寫openvpn server配置檔案
參考連線的配置檔案點選這裡
tls-server
port 1194 #本地服務監聽埠號
proto tcp-server #使用tcp協議
dev-node server #虛擬網路卡的名字, ps:上面已經把虛擬網路卡修改為server
dev-type tap #網路卡模式設定為tap模式
ca ca.crt
cert server.crt
key server.key
dh dh2048.pem
keepalive 10 120
verb 5
cipher none
comp-lzo
management localhost 57505
script-security 3
auth-user-pass-verify auth.bat via-file
#client-connect /tmp/oz-cfg/sbin/clt-s2-81.sbin
#client-disconnect /tmp/oz-cfg/sbin/clt-s2-81.sbin
client-cert-not-required
username-as-common-name
#writepid /tmp/run/oz.pid
#scramble new 1cd5493348dc1fa7fee9ad7a58283b9348dc1fa7fee9ad7a
client-to-client
# NVz8xCng2F7ns
複製程式碼
可以直接複製上面的配置儲存成一個字尾為.ovpn的檔案。除此之外還要生成證照放在同一個目錄下面,具體生成方法可以參考證照生成,如果嫌麻煩不想弄,可以下載文章末尾給出的工具包下載地址,裡面有配置好的證照。
d.生成spiped的混淆加密key
spiped.key 生成方法使用以下Linux命令進行生成,ps:如果是伺服器生成要下載下來本地使用
dd if=/dev/urandom bs=32 count=1 of=spiped.key
複製程式碼
#3.編寫家裡的個人電腦配置 ######a.編寫openvpn配置檔案 參考本地連線的配置檔案點選這裡
ifconfig-nowarn
client
verb 5
dev tap
remote 127.0.0.1 1195
proto tcp
auth-user-pass
<ca>
-----BEGIN CERTIFICATE-----
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
xpqqnS/vmf+eu6c=
-----END CERTIFICATE-----
</ca>
comp-lzo
route-delay 0
remote-cert-tls server
cipher none
#route 192.168.1.0 255.255.255.0 vpn_gateway
#scramble new 1cd5493348dc1fa7fee9ad7a58283b9348dc1fa7fee9ad7a
route 10.0.0.169 255.255.255.255 net_gateway
redirect-gateway def1
複製程式碼
#4.辦公室電腦客戶端執行 ######a.首先執行使用openvpn server配置檔案執行,使用cmd命令列工具進入配置檔案下面的目錄然後執行以下命令
openvpn --config server.ovpn --log server.log --status server.status
複製程式碼
注意要使用管理員許可權執行。
######b.在openvpn執行起來後,再來執行spiped,使用cmd命令列工具進入spiped程式和上面步驟生生成的spiped.key的目錄然後執行以下命令
spiped -F -d -f -s 127.0.0.1:1195 -t 127.0.0.1:1194 -k spiped.key
複製程式碼
注意要使用管理員許可權執行。
######c.在spiped執行起來之後,再來執行frpc,使用cmd命令列工具進入frpc程式和frpc.ini目錄然後執行以下命令列
frpc -c frpc.ini
複製程式碼
注意要使用管理員許可權執行。
當以上三個都執行成功就意味著,辦公室的網路已經連線上了公網的轉發伺服器。
5.家裡的電腦客戶端配置執行
######a.使用cmd命令列工具進入spiped程式和上面步驟生成的的spiped.key的目錄然後執行以下命令
spiped -F -e -f -s 0.0.0.0:1195 -t 公網ip:埠 -k spiped.key
複製程式碼
注意要使用管理員許可權執行。
######b.使用openvpn client配置檔案執行,使用cmd命令列工具進入配置檔案下面的目錄然後執行以下命令
openvpn --config client.ovpn --auth-user-pass --log client.log
複製程式碼
注意要使用管理員許可權執行。
全部跑起來這個時候家裡的PC就能夠連線進去公司辦公室的內網。
鑑於配置的複雜程度,我已經配置好一份放在github上面點選傳送門進去
配置中需要更改的地方已經做了註釋,本教程就到此為止,要是有什麼疑問歡迎留言,或者加入天星交流群進行交流。 ·