撿一臺路由器

起因

現在市面上有那么多路由器可以選擇,為什么還要自己造一臺呢?很多國產路由器 fork 自 OpenWRT 的源代碼,但違反其 GPL 協議,拒絕對修改部分開源。使用這些路由器是對 OpenWRT 作者的褻瀆,同時我也不敢保證做出如此齷齪事的廠家還有什么齷齪事做不出。

還有就是市面上大多數路由器簡直都是垃圾,完全不能理解誰能堅持使用他們。許多人喜歡把 x86 的路由器叫做「軟路由」,這并不符合軟路由的定義,像市面上大多數使用 ARM 或者 MIPS 的路由器其實也是軟路由,路由的吞吐量極大地取決于路由器的 CPU 性能,并沒有什么對路由的硬件加速。

目前市面上路由器選型最多的芯片主要選擇就是 MT7620 和 MT7621。如果沒有非常重的路由轉發規則的話,這兩個還是相對穩定的。但如果像我一樣刷了 OpenWRT 的系統,寫了一堆路由規則的話,一天能死機幾次,也是沒誰了。后來換了洋垃圾 Netgear WNDR4300,這大概能滿足大多數人的要求,但我還是一周會死機個一兩次。

那為什么不去買個軟路由整機?那玩意反正誰用誰知道。像 Intel D2500 性能根本也是不夠用的,J1800 還勉強差不多。而很多小作坊搞出來的主板問題多得很,這種坑還是少碰為妙。而真的大廠出的商業路由器,不但貴,而且一般都是為機柜設計的,家里放著也不方便。

于是不如,把家里不用的電腦拿出來折騰一番,當路由器 + NAS 使用,一個機器解決兩個問題。

硬件配置

類型 型號 備注
CPU Intel i3 6100 3.7GHz
主板 ASUS B150M-PLUS
內存 DDR4 2400 8GB
硬盤 2TB 西數紅盤 2 塊
電源 酷冷至尊 400W 實際功耗峰值 100W 以內
機箱 JONSBO V4 Mini-ATX

這個機器底子不錯,i3 CPU 有個好處就是有不錯的集成顯卡。(全低畫質守望屁股大概 15 幀)萬一自己不小心把 iptables 搞崩了,插個顯示器鼠標鍵盤就能調試。但用來做路由器和還是缺了點,主要就是只有一個網口,根本沒法用。所以我去拆了點二手服務器配件下來。

類型 型號 備注
網卡 Intel PCI-E I350-T4 v2 ¥239.00 二手服務器拆機

軟件部分

我的第一反應還是裝個 OpenWRT,畢竟路由需要的這玩意都有。不過這東西對雙核的優化很不好,對硬盤支持也不太好。所以還是穩妥地使用 Debian 9,就是設置起來變得麻煩了不少,但靈活性確實是好了不少。

硬盤分區

我的選擇是把 2 塊 2TB 硬盤做一個軟 RAID 1,我們現在 CPU 性能好,不怕揮霍不需要額外安裝 RAID 卡。

/ /home swap NTFS
400GB 100GB 8GB 1492GB

專門處理一個 NTFS 分區給 NAS 用。不希望被權限問題影響,所以就搞 NTFS 算了。

基本設置

su
apt install sudo openssh-server net-tools
adduser 自己的用戶名 sudo

Debian 裝完,一些基本東西還是要裝起來,特別是 Debian 是不自帶 sudo 的。安裝后,需要把自己的用戶加入到 sudo 的用戶列表。

另外你還需要修改 openssh 的配置允許遠程連接后可以訪問 su。修改 /etc/ssh/sshd_config,將 PermitRootLogin no 改為 PermitRootLogin yes

網卡設置

ifconfig 來獲取一下可用的網絡接口,我的五個網絡接口是:

enp0s31f6 enp1s0f0 enp1s0f1 enp1s0f2 enp1s0f3

這么長的名字,怕不是等會要輸死。

我的 WAN 口是 enp0s31f6 和 enp1s0f3,分別是電信 200Mbps 寬帶和移動 100Mbps 寬帶,都接在光貓上,通過 DHCP 連接,電信的 DHCP 地址是 192.168.1.x,而移動是 192.168.100.x。為了避免沖突,我就把我的本地路由地址段放在 192.168.88.x 了。

三個 LAN 口肯定不想單獨配置,畢竟沒有 VLAN 隔離需求,所以就把他們橋接起來,生成一個虛擬網口

apt install bridge-utils

然后我們就可以設置網口了,按我的需求,我的 /etc/network/intefaces 如下:

# The loopback network interface
auto lo
iface lo inet loopback

auto enp0s31f6
allow-hotplug enp0s31f6
iface enp0s31f6 inet dhcp

auto enp1s0f3
allow-hotplug enp1s0f3
iface enp1s0f3 inet dhcp

auto br0
allow-hotplug br0
iface br0 inet static
    address 192.168.88.1
    network 192.168.88.0
    netmask 255.255.255.0
    broadcast 192.168.88.255
    bridge-ports enp1s0f0 enp1s0f1 enp1s0f2

改完重啟網絡服務生效:

service networking restart

DHCP

一般來說 DHCP 和 DNS 可以一起搞定,但我的 dnsmasq 做 DHCP 不太穩定,經常罷工,不知道原因,我們還是分開搞。

apt install isc-dhcp-server

修改 /etc/default/isc-dhcp-server

INTERFACESv4="br0"
INTERFACESv6=""

禁用掉 IPv6 的分配,因為我的上游電信沒給我分配,我路由上分配容易出現一些奇奇怪怪的問題。然后修改 /etc/dhcp/dhcpd.conf

subnet 192.168.88.0 netmask 255.255.255.0 {
  range 192.168.88.10 192.168.88.240;
  default-lease-time 86400;
  max-lease-time 86400;
  option routers 192.168.88.1;
  option ip-forwarding off;
  option broadcast-address 192.168.88.255;
  option subnet-mask 255.255.255.0;
  option domain-name-servers 114.114.114.114, 8.8.8.8;
}

如果你不需要自己做 DNS,那么這么做就行,如果你需要自己做 DNS 那就把 domain-name-servers 設置成本機 IP 192.168.88.1。

設置完重啟服務:

service isc-dhcp-server start

找一臺電腦插上去應該此時能分配到 IP,但還不能上網,如果不能分配到往回檢查問題。要自己配置 DNS 的,那么就需要安裝 dnsmasq 然后設置一下上游服務器即可。

路由系統

現在我們開始制作路由,首先先要允許包轉發,修改 /etc/sysctl.conf

net.ipv4.ipforward=1

然后使用

sysctl -p

生效。

接下來搞一下 iptables 吧。

# 清空 iptables
iptables -F
iptables -X
iptables -t nat -F
iptables -t nat -X
iptables -t mangle -F
iptables -t mangle -X
iptables -t raw -F
iptables -t raw -X

# 允許內網到每個外網網卡的轉發
iptables -A FORWARD -i br0 -s 192.168.1.0/255.255.255.0 -j ACCEPT
iptables -A FORWARD -i enp0s31f6 -d 192.168.1.0/255.255.255.0 -j ACCEPT
iptables -A FORWARD -i br0 -s 192.168.100.0/255.255.255.0 -j ACCEPT
iptables -A FORWARD -i enp1s0f3 -d 192.168.100.0/255.255.255.0 -j ACCEPT

# 使可以 NAT 到兩個外網外卡
iptables -t nat -A POSTROUTING -o enp0s31f6 -j MASQUERADE
iptables -t nat -A POSTROUTING -o enp1s0f3 -j MASQUERADE

這么弄完應該就已經可以上網了,只是默認只走一個網卡,如果你是單外網的,那么這樣就行了。這時候可以固化 iptables 規則。

apt install iptables-persistent

這些就是基本的 iptables,如果你像我一樣需要更復雜的路由轉發規則可以自己瞎搞,搞完需要重新保存 iptables 規則

dpkg-reconfigure iptables-persistent

即可。

負載均衡

負載均衡就是再加一些 ip rule 即可。我的配置如下:

ISP1=enp0s31f6
ISP2=enp1s0f3

IP1=192.168.1.1
IP2=192.168.100.1
REDLOCAL=192.168.88.0/24
IPLOCAL=192.168.88.1

ip rule add from $IP1 lookup ISP1
ip route add $REDLOCAL via $IPLOCAL table ISP1
ip route add 0/0 via $IP1 table ISP1
ip rule add from $IP2 lookup ISP2
ip route add $REDLOCAL via $IPLOCAL table ISP2
ip route add 0/0 via $IP2 table ISP2
ip route replace default scope global nexthop via $IP1 dev $ISP1 weight 2 nexthop via $IP2 dev $ISP2 weight 1

我的 weight 是 2:1 因為一個是 200Mbps 一個是 100Mbps 的兩條網絡。然后就是一些教程中最后一句指令用的是 equalize 來分配,新版本的 ip 工具已經移除了 equalize 參數,不要踩坑。這段腳本可以加入開機啟動。

WiFi AP

雖然插個無線網卡就能當 AP 用,但考慮到穩定性,我就像模像樣搞個 AP 吧。我用的是 UBNT 的 UAP-AC-LITE,配置也非常方便。坑爹的是我天貓上買完,客服給我打了三個電話問我會不會用,我又不是智障。

NAS

要實現 NAS 功能主要就是兩件事,掛載硬盤和網絡共享。

先建個文件夾來掛載:

mkdir /mnt/nas

df 工具找一下自己要掛的硬盤,然后修改 /etc/fstab,例如掛載 /dev/sda1 到 /mnt/nas

/dev/sda1 /mnt/nas ntfs defaults 0 0

mount -a

來掛載同時檢查自己 fstab 的正確性。

掛上硬盤后就是裝個 samba:

apt install samba

samba 的用戶系統和操作系統是獨立的,通過 smbpasswd -a 用戶名 創建。

然后通過修改 /etc/samba/smb.conf 設置權限和需要共享的目錄。在其他機器上就可以通過 smb 協議訪問網關來存取文件了。

至此我們路由 + NAS 的基本功能就完成了。你還可以通過 ssh 連上去安裝一些其他應用例如離線下載或者 DNS 防污染或者什么透明代理之類。反正這臺機器的性能隨便怎么折騰。目前在我的暴力使用了超過 1 個月下,還沒有出現重啟或別的問題,可以說是相當穩定了。

最后編輯于
?著作權歸作者所有,轉載或內容合作請聯系作者
平臺聲明:文章內容(如有圖片或視頻亦包括在內)由作者上傳并發布,文章內容僅代表作者本人觀點,簡書系信息發布平臺,僅提供信息存儲服務。
  • 序言:七十年代末,一起剝皮案震驚了整個濱河市,隨后出現的幾起案子,更是在濱河造成了極大的恐慌,老刑警劉巖,帶你破解...
    沈念sama閱讀 228,505評論 6 533
  • 序言:濱河連續發生了三起死亡事件,死亡現場離奇詭異,居然都是意外死亡,警方通過查閱死者的電腦和手機,發現死者居然都...
    沈念sama閱讀 98,556評論 3 418
  • 文/潘曉璐 我一進店門,熙熙樓的掌柜王于貴愁眉苦臉地迎上來,“玉大人,你說我怎么就攤上這事。” “怎么了?”我有些...
    開封第一講書人閱讀 176,463評論 0 376
  • 文/不壞的土叔 我叫張陵,是天一觀的道長。 經常有香客問我,道長,這世上最難降的妖魔是什么? 我笑而不...
    開封第一講書人閱讀 63,009評論 1 312
  • 正文 為了忘掉前任,我火速辦了婚禮,結果婚禮上,老公的妹妹穿的比我還像新娘。我一直安慰自己,他們只是感情好,可當我...
    茶點故事閱讀 71,778評論 6 410
  • 文/花漫 我一把揭開白布。 她就那樣靜靜地躺著,像睡著了一般。 火紅的嫁衣襯著肌膚如雪。 梳的紋絲不亂的頭發上,一...
    開封第一講書人閱讀 55,218評論 1 324
  • 那天,我揣著相機與錄音,去河邊找鬼。 笑死,一個胖子當著我的面吹牛,可吹牛的內容都是我干的。 我是一名探鬼主播,決...
    沈念sama閱讀 43,281評論 3 441
  • 文/蒼蘭香墨 我猛地睜開眼,長吁一口氣:“原來是場噩夢啊……” “哼!你這毒婦竟也來了?” 一聲冷哼從身側響起,我...
    開封第一講書人閱讀 42,436評論 0 288
  • 序言:老撾萬榮一對情侶失蹤,失蹤者是張志新(化名)和其女友劉穎,沒想到半個月后,有當地人在樹林里發現了一具尸體,經...
    沈念sama閱讀 48,969評論 1 335
  • 正文 獨居荒郊野嶺守林人離奇死亡,尸身上長有42處帶血的膿包…… 初始之章·張勛 以下內容為張勛視角 年9月15日...
    茶點故事閱讀 40,795評論 3 354
  • 正文 我和宋清朗相戀三年,在試婚紗的時候發現自己被綠了。 大學時的朋友給我發了我未婚夫和他白月光在一起吃飯的照片。...
    茶點故事閱讀 42,993評論 1 369
  • 序言:一個原本活蹦亂跳的男人離奇死亡,死狀恐怖,靈堂內的尸體忽然破棺而出,到底是詐尸還是另有隱情,我是刑警寧澤,帶...
    沈念sama閱讀 38,537評論 5 359
  • 正文 年R本政府宣布,位于F島的核電站,受9級特大地震影響,放射性物質發生泄漏。R本人自食惡果不足惜,卻給世界環境...
    茶點故事閱讀 44,229評論 3 347
  • 文/蒙蒙 一、第九天 我趴在偏房一處隱蔽的房頂上張望。 院中可真熱鬧,春花似錦、人聲如沸。這莊子的主人今日做“春日...
    開封第一講書人閱讀 34,659評論 0 26
  • 文/蒼蘭香墨 我抬頭看了看天上的太陽。三九已至,卻和暖如春,著一層夾襖步出監牢的瞬間,已是汗流浹背。 一陣腳步聲響...
    開封第一講書人閱讀 35,917評論 1 286
  • 我被黑心中介騙來泰國打工, 沒想到剛下飛機就差點兒被人妖公主榨干…… 1. 我叫王不留,地道東北人。 一個月前我還...
    沈念sama閱讀 51,687評論 3 392
  • 正文 我出身青樓,卻偏偏與公主長得像,于是被迫代替她去往敵國和親。 傳聞我的和親對象是個殘疾皇子,可洞房花燭夜當晚...
    茶點故事閱讀 47,990評論 2 374

推薦閱讀更多精彩內容