榨乾 VM 主機 Part 2 - 使用 Docker 安裝 SOCKS5 Proxy Server 代理伺服器

2022/01/08閱讀時間約 13 分鐘
接下來,就是要使用 MobaXterm 來 SSH 連線到 VM 主機。
📷
連線的方式如上,若是 DNS 可以解析到 域名,那就在 Remote Host 打上域名,若是還不能夠成功解析,那就先打上公用 IP(外部 IP)
📷
成功的話就設看到這個畫面。

接下來,由於這個免費方案的 VM 主機,效能只有 1C 1G 而已,非常的脆弱,基本上是不能做太多的事情,一般來說會建議只專注做一件事情就好,例如只安裝 Wordpress、Proxy server 或是 VPN server。
BUT!
若是只能這樣的話,那就太無聊了,所以我們要榨乾它。
接下來的思路是,使用 Docker,將需要的服務通通安裝到 Container 裡,這樣一但服務掛掉,只要將 Container 重啟就可以了,並且可以設定好 Container 的效能限制讓它不致於將所有的效能都吃光。
首先,先來設定 SWAP (置換空間、交換空間),由於目前擁有的 memory 只有 1G(1024M),很容易就用光了,而一旦用光了,基本上就是直接死機給你看,最慘的狀況就是連 SSH 都無法連線,必須要將 VM 主機重啟才可以。
關於 SWAP 的相關知識一樣不在這邊作科普,這邊建議記憶體不足 4G 的話,swap 設定為兩倍比較好,所以這邊將會設定 2G 的 swap 空間。
第一步先更新一下該更新的套件,並安裝 vim、net-tools、saidar、docker、docker-compose
sudo apt update && sudo apt upgrade -y && sudo apt autoremove -y

sudo apt install vim net-tools saidar docker docker-compose -y
設定 swap 約 2G 的空間/容量
先確認系統是否有預設 swap
sudo swapon -s
若是無回應就表示沒有設定
接下來是設定 2G 的 swap 交換空間
sudo fallocate -l 2G /swapfile   #設定2G的swap 空間

sudo chmod 600 /swapfile      #設定資料夾的權限,600為系統管理員可讀/寫,其他使用這不可讀/寫

sudo mkswap /swapfile        #初始化 swap

sudo swapon /swapfile        #啟用 swap
📷
目前的設定,若是VM 重啟就會停用,以下是設定開機便啟用 swap
sudo vim /etc/fstab     #修改 fstab 這份文件
新增這一行
/swapfile none swap sw 0 0
📷
※ vim 文字編輯器的基本用法
  1. 按 i 才能夠進行編輯。
  2. 結束編輯:ESC。
  3. 儲存並退出這份文件:(冒號): + wq。(:wq)
  4. 強制退出這份文件:(冒號): + q!。(:q!)
  5. 快速刪除全部的內容:游標移到最上方,鍵盤直接按 d + G
以上參數新增完畢即完成 swap 設定
若是要停用 swap,或是要修改 swap。
sudo swapoff -a

sudo rm -f /swapfile
修改 swap 的使用積極度,ubuntu 的預設值是 60,可以解釋成(但不完全是)系統在執行時,有 60% 的機率會使用 swap,這邊會建議降到 10 以下,設定成 0 也沒關係(但最好不要)。
cat /proc/sys/vm/swappiness            #查詢 swappiness 的設定值

sudo sysctl vm.swappiness=5            #設定 swappiness=5

                           #以下的動作,也是本次才知道,需要使用 root 帳號進行。

sudo su root                     #登入 root 帳戶

echo "vm.swappiness = 5" >> /etc/sysctl.conf   #設定 swappiness 開機就是 5,若不設定則重新開機會復原到 60
📷
以上,就是關於 swap 交換空間的設定方式,你的 VM 主機現在已經沒那麼容易自殺了。

接下來,將會使用 Docker ,以 Ubuntu 的官方 image,建立 Ubuntu 的 Container ,並限制這個 Container 的性能,然後將它變成 Proxy Server。
#docker 指令需要的權限比較高,所以若非 root 帳戶,則都要使用 sudo 指令。

sudo docker run --restart=always -itd --name proxy -p 9527:9527 -m 512m --memory-swap 1024m ubuntu /bin/bash
這邊使用到的指令,簡單解釋一下。
--restart=always >> 如果 container 自己出問題死掉,請自動重啟。
-itd >> container 請在背後持續運行,並為 container 分配一個終端,以方便連線下指令。
--name >> 為 container 命名。
-p >> 設定 VM 主機與 container 對應的 port。
-m >> 設定 memory 限制。
--memory-swap >> 設定 container 的 swap 使用量。
ubuntu >> 使用 ubuntu 這個 image 建立 container。
📷
正常來說會先把要用的 image 先抓下來,再使用 image 建立 container。
這邊由於沒有先抓 image,所以系統自動幫我們抓最新的 ubuntu image,使用 sudo docker ps 可以查看 container 是否有正常運行。
進入這個 ubuntu container,它目前名字是 proxy。
sudo docker exec -it proxy bash
ubuntu 官方的 image 建立的 container ,都是最小最精簡的系統,很多套件都要自行安裝,而且一旦連線就是最高權限的 root 帳號,所以接下來的指令都不用加 sudo,想用也不行,會顯示錯誤。
(若是硬要使用 sudo 指令,請先安裝它, apt install sudo -y)
proxy server 有很多種協定類型,目前的主流是 HTTP(s) Proxy 與 SOCKS5(4) Proxy。
主要的差異在這邊,由於涉及得知識量有點多,所以在此僅以下圖解釋,若是看不懂的話請放棄理解細節。
📷
📷
簡單了解,HTTP Proxy 是主要且古老的協議,所以很多程式若是可以設定 Proxy 的話,那一定是指這個協定,除非該程式在設定時有說是 SOCKS Proxy 協定,例如:Telegram。
SOCKS5 是較新的協議,比較安全,且速度更快,且允許各式各樣不同種類的封包使用。
📷
首先是連線、更新套件資料庫,並安裝 dante 這個套件,與其它好用的套件。
apt update && apt install dante-server vim -y
編輯設定檔
vim /etc/danted.conf
裡面有原先的設定值,首先按 d + G(按一下d,然後按SHIFT+g),刪除原有的設定。
然後按 i ,進入編輯模式。
【連接代理時,不必輸入帳密的設定】
logoutput: syslog stdout /var/log/sockd/sockd.log

internal: eth0 port = 9527
external: eth0
method: none
clientmethod: none
user.privileged: root
user.notprivileged: proxyuser
client pass {
from: 0.0.0.0/0 port 1-65535 to: 0.0.0.0/0
}

pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
command: bind connect udpassociate
log: error # connect disconnect iooperation
}

pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
command: bindreply udpreply
log: error # connect disconnect iooperation
}
📷
【連接代理時,必須要輸入帳密的設定】
logoutput: syslog stdout /var/log/sockd/sockd.log

internal: eth0 port = 9527
external: eth0
method: username
clientmethod: none
user.privileged: root
user.notprivileged: proxyuser
client pass { from: 0.0.0.0/0 port 1-65535 to: 0.0.0.0/0}
pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
command: bind connect udpassociate
log: error # connect disconnect iooperation
method: username
}

pass {
from: 0.0.0.0/0 to: 0.0.0.0/0
command: bindreply udpreply
log: error # connect disconnect iooperation
}
以上的設定中,我們已經設定 proxy 的使用者,帳戶為 proxyuser,接下來在系統新增這個使用者,並設定它的密碼。
useradd proxyuser     # 新增使用者 proxyuser

passwd proxyuser     # 修改 proxyuser 密碼

mkdir /var/log/sockd   # 新增錯誤紀錄(log)的資料夾
以上內容,就完成配置的設定嘍,接下來就是啟動這個程式(服務)。
service danted start
📷
會跳出一堆看不懂的東西,也不曉得到底有沒有成功,這時候測試的方法有兩個,第一就是直接找個程式來連接測試看看,另一個就是察看我們設定的連接port。
查看 9527 這個port,我們需要安裝 net-tools 這個套件,在前面我們有安裝在 VM 主機上了,container 還沒有安裝。
apt install net-tools -y

netstat -anp | grep 9527
📷
若是沒有回傳任何結果,那就是啟動失敗了,若有成功的話則會像上圖一樣。
我們可以使用 Telegram 或 Firefox 測試看看。
📷
📷
Firefox 火狐瀏覽器可以直接設定 SOCKS5 Proxy 的代理方式,若是設定有成功,那就可以上網了,若是設定失敗的話,火狐瀏覽器會直接無法連網。
在這邊可以看到我的 ip 顯示是在美國。
📷
在容器中退出,請輸入 exit。
使用 sudo docker ps 可以查看 container 是否有在運作。
使用 sudo docker stats 可以監看 container 目前的運作狀況。(按 CTRL+C 則停止監看)
以上,便是在 VM 主機中,使用 Docker 並安裝 SOCKS Proxy Server 的方式,如此方式可以確保 Proxy server 不會把 VM 的效能給吃光,由於 Proxy server 的特性,雖然可以達到類似於 VPN 的效果,但也容易把主機的效能個吃光,所以使用 Docker 來建立,則可以保證 VM 不會輕易的死掉。
接下來會在敘寫一篇,使用 Docker Compose 建立 Wordpress 的方法,這樣這台小費費 VM 主機,就可以同時提供 Wordpress 與 proxy server 兩種服務了。
但其實,並不建議這樣做配置,因為無論是 Proxy server 、VPN server 或是 Wordpress 站台,其實運行在 1C 1G 的VM 上,都是有點吃力的,本篇文章只是使用免費方案進行練習而已,實際上要建立長期使用的穩定站台時,會建議將配置拉高,至少,記憶體要設定到 4G以上會比較好。
為什麼會看到廣告
迷途小資男
迷途小資男
我是 Roy 一介文組的轉職攻城獅,在塵世中摸索的迷途小資男。
留言0
查看全部
發表第一個留言支持創作者!