目錄
目錄X
linux系統(tǒng)的內(nèi)網(wǎng)服務(wù)器通過SOCKS5隧道訪問互聯(lián)網(wǎng)設(shè)置簡(jiǎn)介
開始之前
本文章內(nèi)容設(shè)定倆個(gè)服務(wù)器均為linux操作系統(tǒng),分別為A和B
A服務(wù)器是純內(nèi)網(wǎng),設(shè)定內(nèi)網(wǎng)IP為192.168.0.100
B服務(wù)器連接的內(nèi)網(wǎng),設(shè)定內(nèi)網(wǎng)IP為192.168.0.180,同時(shí)這個(gè)服務(wù)器也連接的互聯(lián)網(wǎng)。
① 在A服務(wù)器通過 SSH 建立 SOCKS5 隧道到B服務(wù)器
# 確保 sshpass 已安裝,如果不安裝這個(gè)也可以設(shè)置ssh的免密連接 sudo yum install sshpass # 先測(cè)試手動(dòng)連接 ssh -f -N -D 1080 root@192.168.0.180 #開啟socks5通道,端口設(shè)置的1080 export ALL_PROXY="socks5h://127.0.0.1:1080" #設(shè)置臨時(shí)環(huán)境變量,也可以根據(jù)實(shí)際情況需要分別設(shè)置http與https代理
這會(huì)在 A 本地監(jiān)聽
127.0.0.1:1080
,通過代理到B服務(wù)器已經(jīng)可以訪問互聯(lián)網(wǎng),則說明OK,可以繼續(xù)下面的設(shè)置將隧道固定下來,重啟服務(wù)器也不會(huì)失效。
② 在A服務(wù)器配置 systemd 自動(dòng)建立 SOCKS5 隧道
創(chuàng)建服務(wù)文件 vi /etc/systemd/system/ssh-socks5.service
# /etc/systemd/system/ssh-socks5.service [Unit] Description=SSH SOCKS5 Tunnel to B Server After=network-online.target Wants=network-online.target [Service] ExecStart=/usr/bin/sshpass -p 'B服務(wù)器密碼' ssh -N -D 1080 -o StrictHostKeyChecking=no root@192.168.0.180 Restart=always RestartSec=5s ExecStartPre=/bin/sleep 15 [Install] WantedBy=multi-user.target
啟用并啟動(dòng)服務(wù):
sudo systemctl daemon-reload sudo systemctl enable ssh-socks5 sudo systemctl start ssh-socks5
確認(rèn)運(yùn)行中:
systemctl status ssh-socks5
③ 在A服務(wù)器設(shè)置環(huán)境變量讓所有流量走 SOCKS5
編輯 ~/.bashrc
或 /etc/profile.d/proxy.sh
添加:
export ALL_PROXY="socks5h://127.0.0.1:1080" export http_proxy="socks5h://127.0.0.1:1080" export https_proxy="socks5h://127.0.0.1:1080"
生效配置:
source ~/.bashrc
④ 在A服務(wù)器測(cè)試是否生效
curl http://ifconfig.me
返回 B 服務(wù)器的公網(wǎng) IP 即成功。
結(jié)論
[A 服務(wù)器] --(SSH Socks5)--> [B 服務(wù)器] --Internet A服務(wù)器的curl/git/pip等訪問通過Socks5隧道127.0.0.1:1080 -> 實(shí)際上是轉(zhuǎn)發(fā)到B服務(wù)器再訪問的互聯(lián)網(wǎng)