標籤 計算機 下的所有文章

ShadowManager 穩定版本釋出

歷時 4 個月(明明就是五天),shadowmanager的開發終於結束了。

ShadowManager 是一個用於同時維護多個不同加密的 shadowsocks 伺服器的輕量級,可擴展指令碼。

預設命令的使用方式如下:

add: 新增一個伺服器到 shadowmanager 的管理,需要 3 個參數。埠,密碼,和加密方法。
start: 啟動 shadowmanager,無需參數。
stop: 停止 shadowmanager,無需參數
restart: 重啟 shadowmanager,無需參數。
status: 檢視 shadowmanager 狀態,無需參數。
show: 顯示所有 shadowsocks 伺服器,無需參數。
remove: 移除指定 ID 的 shadowsocks 伺服器,使用 "show" 來檢視所有伺服器,需要 1 個參數,伺服器 ID。
enovr: 啟用一個或多個覆寫,可將覆寫名作為參數(可選)。
disovr: 禁用一個或多個覆寫,可將覆寫名作為參數(可選)。

Shadowmanager 的特性之一是其可擴展性,在 Shadowmanager 中,提供了覆寫(Overrides),包含(Includes)與鉤子(Hooks)。它們可以被用來修改那些未在 Shadowmanager 中給出選項的行為。包含在 Shdowmanager 載入後讀取,覆寫在 Shadowmanager 載入之前。在每個覆寫之前都有兩位字元,它們所代表的是載入的優先順序。優先順序從 00 排列至 zz,字元越往後,優先順序越高。

目前,Shadowmanager 提供這些覆寫:

  • 00-no-root:該覆寫通過替換 root 檢測函數來跳過 root 檢查,在需要臨時關閉 root 檢測時很有用。
  • 10-base64-encrypted-passwd:使用 base64 來儲存伺服器的密碼。這在你需要在密碼中使用特殊字元時有用。
  • 20-json-to-shadowmanager:該覆寫提供了一個 ‘json2manager’ 命令,可以用於將shadowsocks json 配置檔案轉換為 shadowmanager 的配置檔案。
  • 30-generate-qr-code:為 Shadowmanager 的伺服器生成二維碼。
  • 40-randpass:新增一個命令 ‘add-randpass’ 至 shadowmanager,這個命令允許使用者新增隨機密碼的 shadowsocks 伺服器。
  • 70-time-limit:以小時限制每個 shadowsocks 伺服器可以使用的時間。這個覆寫會使用 pre-add 事件鉤子,並新增一個 Cronjob 來檢查賬戶並移除過期伺服器。
  • 90-pre-server-daemon:為每個伺服器使用單獨的程序。在需要分開統計每個伺服器的流量時有用。
  • 90-screen-start:這個覆寫將替換 ‘start’ 命令原本的實現,使用該覆寫會讓 shadowsocks 伺服器在 screen 內啟動,而不是作為服務啟動。這在需要檢視伺服器日誌時有用。
  • 99-chinese-usage:這個覆寫提供了中文的幫助文字。
  • aa-wizard:為 shadowmanager 的伺服器新增、伺服器移除等操作提供一個嚮導。
  • zz-interactive-mode:這個覆寫會使得 shadowmanager 以互動式模式啟動。該方法可能會引起一些問題,故不推薦。

鉤子是在特定行為執行前後運行的函數。這些鉤子可以在 hooks/ 中定義。某些覆寫可能會按需修改鉤子來達成某些目的。在非原版的實現中也可以定義鉤子。(例如覆寫與包含,甚至鉤子本身!)

usage: hook <hooked_function>

Hook 命令會檢測函數是否存在,若存在則會將其執行。

若想要新增您自己的命令用法與解釋至 shadowmanager,您可以使用 ‘add-help’ 與 ‘add-usage’。這兩個命令都會從標準輸入讀取輸入。幫助文字的語言可以在這兩個命令的參數內定義。若留空,則會被作為預設語言顯示(當偏好語言不能被提供時使用)。

usage: echo '   <your-command>: <your-explaination>' | add-help [help-language]
usage: echo '   <your-command>: command-name <parameters>' | add-usage [help-language]

Shadowmanager 釋出於 MIT 協議。項目地址:https://github.com/MagicNAT/shadowmanager/

伺服器被偉大的牆堵上的二三事

就在前天,我的伺服器很不幸的被牆了。那時我用著用著 Shadowsocks,突然之間發現自己的IP地址跑去了fallback的伺服器。

第一個反應是,噫,垃圾玩意,又炸了了吧?( ̄. ̄)

然後緊接著我就發現,誒我去,怎麼網站也掛了?(⊙A⊙)

再接著,我就發現,臥槽?SSH都掛了?Σ(° △°|||)

再然後… 我就發現伺服器被牆了。(;´-`)

實際上一開始還有點小激動,臥槽,牆了啊!感覺自己好厲害啊!(。・`ω´・)

之後就開始苦惱了,轉移IP估計沒個一天搞不定。(´._.`) 伺服器上還有別的網站呢,讓別人操心多不好啊。

說轉移,那就轉移吧,發好工單,兩分鐘就拿到了新IP,於是就去把伺服器上的配置檔案全部改了一遍,然後重啟,等待分配新的IP。

重啟一下,嗯… 這不就分到新IP了嗎,接下來該改ns就可以了吧,還是很方便的嘛。( ; ̄ω ̄)ゞ

然後我在瀏覽器裡輸入了新的IP。

一秒… 兩秒… 三秒…

(・∀・*) 誒?

五秒… 八秒.. 十秒… Timeout!

(° ▽、° ) 誒??

(ʘдʘ|||) 這個IP還是個被牆的IP啊!

深呼吸、緩了緩,然後繼續發工單。(´・_・`)

Linode 那邊的客服倒也不敢怠慢,馬上又給了我個新IP。不得不說 Linode 服務還是不錯的 (才不是軟文!_(:з」∠)_

又把配置全部修改一遍,重啟好之後,我打開了瀏覽器,輸入IP。

(・∀・(・∀・ (・∀・*) 可以的吧?可以的吧?一定可以的吧?

很幸運的,只過了一秒,它開啟啦!!(′▽`〃)

本來以為我到這IP轉移就快要結束了,然後殘酷的現實告訴我,我還是太年輕了。

我開啟enom,等待那破網站緩緩地開啟,然後緩緩的開啟登陸介面,輸入使用者密碼,按下提交。

然後就這樣等了好幾分鐘。

噫?密碼不正確?(,,Ծ‸Ծ,,)

好咯,那我換個。

誒?還是不正確?(ㆀ˘・з・˘)

好咯我輸了,重置密碼咯。我緩緩地走完了密碼重置流程,開啟郵箱。

( ・∀・) 郵件呢?

(・∀・*) 誒沒有嘛?

(*・∀・) 奇怪了,在哪裡呀?

(o゜▽゜)o 難道是我填錯了啥?

那再來一次咯…

又走了一次漫長的流程。然而,

還是什麼鬼都沒有啊!(* ̄△ ̄*)

(´・ω・`) 好吧,大概enom郵件系統是殘廢的。

那就手工電郵給enom好了。

下午發出了郵件,enom終於在第二天的凌晨回覆了我(說好的7×24技術支援呢?)。

( ̄o ̄) 噢,讓我回復郵件回答安全問題啊。

( ̄、 ̄) 那我回咯。

當我回答好傳送出去之後,回頭看了眼發過來的郵件,發現了這麼一句話:

My Support Hours: 6:30am - 3:30pm (Pacific Time), Monday through Friday
Out of the office Saturday and Sunday

(|| ̄□ ̄) 你怎麼不去死啊!我急著重設ns呢!

緩了口氣,看了看垃圾郵件。

( ̄ε ̄;) 原來… 新密碼發了給我了啊。

( ̄ー ̄〃) 不過也是凌晨才發過來的,果然enom的郵件系統是殘廢…

之後,我就愉快的修改了DNS,終於將NS恢復了。

你以為這就完了?

沒有!!

當我開啟我的網站的時候,上面赫然寫著五個字母。

hello

Hello 個鬼啊!這是什麼東西啊!(°□°;)

然後在我傻逼一樣的折騰到晚上之後,我終於發現了問題。

我的域名A記錄寫錯了一個數字。

( 。⊿。) 當時我的表情就是這樣的。

好吧,那我就改回來咯…

可是它還是在那兒Hello。

然後我就覺得奇怪了,dig了一下自己的域名。

然後就發現了,它有一個1周的TTL。(; 。。)

無奈,暫時把域名ns切換到Linode NS,然後靜靜的等了十幾分鍾。

( 。 ▽ 。) 它它它它出來啦!我的網站回來啦!

然後終於結束了IP遷移的大工程。(也成功被自己蠢哭

隨手摘記:重啟基於tcp的伺服器而不丟包的巧妙做法

最近伺服器上掛著的站多了起來,於是發現重啟httpd時候會丟掉不少的請求… 雖然不是一個很大的問題,但是不解決總是讓人心裡不舒服,故稍作研究,發現了一個利用iptabels DROP請求從而巧妙的解決客戶端被拒絕連線的問題。

想法來自:http://www.mail-archive.com/haproxy@formilux.org/msg06885.html

做法很簡單,就是這樣:

iptables -I INPUT -p tcp --dport the_port_of_server --syn -j DROP
... restart your service ...
iptables -D INPUT -p tcp --dport the_port_of_server --syn -j DROP

簡單來說,就是三個步驟。先DROP通往服務埠的連線,因為是DROP,故客戶端不會收到拒絕連線的資訊。於是客戶端會繼續傳送tcp請求,直到超時或收到響應。之後便是重啟服務,然後移除iptables規則,這時,客戶端便能收到伺服器的迴應了,並且在此期間,客戶端並沒有收到任何伺服器拒絕連線的訊息。

使用SSH隧道突破內網對映埠

目的 : 在外部網路的主機上 ( 219.136.123.122 ) ,連線到遠端區域網 ( 192.168.100.23 ) 內沒有埠對映主機 ( 下稱內服 )的 SSH 上 .

需求 : 一臺同時能被內服和外部網路的主機訪問,並且建立ssh隧道的外網伺服器 ( 下稱外服 ) .

外網主機 -> 外服 < - 萬惡的路由器 <- 內服 對於懶人們…直接提供一部到位的方案. 運行這些命令 :
內服執行 : ssh -N -f -R 遠端埠:127.0.0.1:22 外服使用者@外服地址
執行後將需求登陸,進行登陸。
若未提示錯誤,便可以通過登陸到外服,然後輸入 ssh localhost -p 遠端埠 .
例如在外服 ssh -N -f -R 2222:127.0.0.1:22 someone@whatever.com 後就在外部網路能通過 ssh whatever.com -p 2222 來訪問內網主機了.
就這樣 , 不多說 .

原理
參數解釋 :
-N : 將本地機的某個埠轉發到遠端指定機器的指定埠. 其原理很簡單,在本地機器上分配一個 socket 偵聽制定埠, 當此埠接受連線之後, 就會同過安全通道轉發出去, 同時遠端主機和 host 的 hostport 埠建立連線.
-f : 執行後臺驗證,即在一次登陸成功之後便後臺運行.
-R : 即將將遠端主機的某個埠轉發到本地端指定機器的指定埠,也就相當於在遠端主機使用了-N參數.
只有 -N -R 連用時,才能正常建立連線,否則將無法接收遠端主機資料或向遠端主機發送資料.

樣式之風

微軟影響力果然大啊。

Metro 的簡潔風出現之後,多少網站,多少軟體學它?甚至iOS…

WordPress的管理介面也變成簡潔風了,PiWik也是,這會成為以後的一種業界標準?至少就現在看來,全都往所謂的簡潔風發展去了。

我表示很喜歡簡潔,但就現在來看的話,全部都這樣弄,真的沒問題?總感覺會變成清一色簡潔的。早些時候,認為華麗的介面好,就都往那方向搞,最後,審美疲勞了,又搞起了簡潔風麼…

這簡直就不能直視嘛!

總而言之,現在所謂的簡潔美似乎要開始變味了。

嘛…不可思議,不可思議!

關於CDLinux之安裝

學校電腦上的Windows總崩…故此周研究CDL之安裝安裝方法略坑…

安裝*.iso自然想到的是UltraISO,可是,用UltraISO就錯了…就是因為這點困擾了我幾個小時.因為命名的關係,總之就是有些奇怪的原因,使得UltraISO,WinRAR一類的軟體解壓檔案是,會搞得大小寫亂七八糟,所以說我用7zip代替了…事實證明,這成功了.

再接下來就是用GRUBINST和GRLDR搞U盤了,在GRUBINST選上不儲存舊MBR,不在軟盤找GRLDR和關閉從舊的MBR找GRLDR之後安裝,再把GRLDR丟進根目錄,然後建立內容如下的menu.lst

color black/cyan yellow/cyan
timeout 30
default 0
title Load CDLinux
find –set-root /CDLINUX/bzImage
kernel /CDLINUX/bzImage CDL_DEV=LABEL=CDlinux CDL_LANG=zh_CN.UTF-8
initrd /CDLINUX/initrd
boot

title Reboot
reboot

然後,大功告成.

附件 : grldr grubinst