將你的Archlinux打造成路由器

来源:https://www.cnblogs.com/wendster/archive/2020/02/23/make-your-archlinux-server-to-a-home-router.html
-Advertisement-
Play Games

弄了一塊J2900雙千兆網口的工控板回來(奇怪的型號)當軟路由用,無奈我又想各種皮,還想裝桌面環境配VNC,而且我還對虛擬機不感冒(況且這U還不支持直通),只得放棄所有路由器系統。作為一名Arch鐵粉,追求無定製純原生,便決定裝Archlinux然後變之為路由器。Archlinux的安裝就不談了,只 ...


route.jpeg

弄了一塊J2900雙千兆網口的工控板回來(奇怪的型號)當軟路由用,無奈我又想各種皮,還想裝桌面環境配VNC,而且我還對虛擬機不感冒(況且這U還不支持直通),只得放棄所有路由器系統。作為一名Arch鐵粉,追求無定製純原生,便決定裝Archlinux然後變之為路由器。Archlinux的安裝就不談了,只講跟標題有關的事。步驟簡單美麗,其他Linux發行版若想食用需自行領會。

首先,你需要一臺雙網口的電腦(單網口想弄WiFi的自行體會),最小化安裝了Archlinux(已經安裝了別的東西也不要緊,只是網路配置部分需自行調整),推薦在ArchISO里操作,避免網路問題無法安裝軟體包(・_・?)。

打造路由器無非幾點:一個網卡用DHCP等方式上網,另一個網卡設置靜態地址併在其上配置DHCP服務,搭建DNS服務(可選),最後配置iptables以轉發流量並充當防火牆。

(可選)在配置網路之前,為了”美觀”,我把網口介面名稱換成了lan和wan。只需要編輯/etc/udev/rules.d/10-network.rules,添加如下內容:

SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="00:e0:b5:90:09:1a", NAME="lan" 
SUBSYSTEM=="net", ACTION=="add", ATTR{address}=="00:e0:b5:90:09:19", NAME="wan"

將MAC地址換成自己的就好。

安裝必須的軟體包(若不想用netctl可換,iptables為Archlinux自帶):

pacman -S netctl dhcpcd dhcp

然後配置網路,我選用netctl,至於為什麼不用NetworkManager是因為可能會導致無法控制網卡的情況。

先配置WAN口,編輯/etc/netctl/extern-profile(名字自取),然後添加如下內容:

Description='Public Interface'
Interface=wan
Connection=ethernet
IP='dhcp'

這是通過DHCP上網,需撥號請查閱ArchWiki。

然後配置LAN口,編輯/etc/netctl/intern-profile(名字自取),然後添加如下內容:

Description='Private Interface'
Interface=lan
Connection=ethernet
IP='static'
Address=('192.168.0.1/24')

Description只是個描述而已,如果你沒有改網口介面名稱,需要將Interface替換成你自己的(如eth0enp0s0之類),Address是(自行領會)。

然後啟用這些東西:

netctl enable intern-profile 
netctl enable extern-profile

現在配置DHCP服務,編輯/etc/dhcpd.conf,刪除所有內容,添加如下內容:

option domain-name-servers 8.8.8.8;
option subnet-mask 255.255.255.0;
option routers 192.168.0.1;
subnet 192.168.0.0 netmask 255.255.255.0 {
    range 192.168.0.2 192.168.0.255;
}

domain-name-servers是DNS伺服器地址,可配置多個,可替換成本地DNS伺服器或其他喜歡的DNS伺服器,subnet-mask是子網掩碼,基本不用管,routers是網關地址,註意和之前netctl的Address匹配,subnet必須以.0結尾,range標明可分配地址區間。

再編輯 /usr/lib/systemd/system/dhcpd4.service,在ExecStart最後面添加監聽網卡名稱。

dhcpd.jpeg

然後設置開機自啟,順便也讓iptables自啟:

systemctl enable dhcpd4
systemctl enable iptables

由於我用不上ipv6,所以省略了。

退出chroot重啟進入系統操作,如果你是遠程操作ArchISO的,會操作到一半斷線導致無法繼續,況且之前配置的服務還沒啟動(雖然可以手動啟動)。

現在WAN口已經連上網了,但是不能通過LAN口上網,於是開始配置轉發和防火牆。

先開啟轉發功能(我只開ipv4):

echo 'net.ipv4.ip_forward=1' > /etc/sysctl.d/30-ipforward.conf

Arch系寫到單獨的文件,其他發行版直接寫到/etc/sysctl.conf

然後配置iptables,先清除所有規則:

iptables -F 
iptables -t nat -F

然後設置預設策略以處理不匹配流量:

iptables -P INPUT ACCEPT 
iptables -P OUTPUT ACCEPT 
iptables -P FORWARD DROP

然後設置變數名,以進行後面的命令(如果沒有修改網口介面名稱需修改成自己的):

export LAN=lan 
export WAN=wan

(可選)鎖定服務,使之只為LAN口工作:

iptables -I INPUT 1 -i ${LAN} -j ACCEPT 
iptables -I INPUT 1 -i lo -j ACCEPT 
iptables -A INPUT -p UDP --dport bootps ! -i ${LAN} -j REJECT 
iptables -A INPUT -p UDP --dport domain ! -i ${LAN} -j REJECT

(可選)將特權埠的TCP/UDP包丟棄:

iptables -A INPUT -p TCP ! -i ${LAN} -d 0/0 --dport 0:1023 -j DROP 
iptables -A INPUT -p UDP ! -i ${LAN} -d 0/0 --dport 0:1023 -j DROP

最後添加NAT規則(註意自行修改):

iptables -I FORWARD -i ${LAN} -d 192.168.0.0/16 -j DROP 
iptables -A FORWARD -i ${LAN} -s 192.168.0.0/16 -j ACCEPT 
iptables -A FORWARD -i ${WAN} -d 192.168.0.0/16 -j ACCEPT 
iptables -t nat -A POSTROUTING -o ${WAN} -j MASQUERADE

現在通過LAN口連接的設備應該能上網了,保存iptables規則:

rm -rf /etc/iptables/iptables.rules 
iptables-save > /etc/iptables/iptables.rules

大功告成,敬情享用吧!(終於可以皮了)


您的分享是我們最大的動力!

-Advertisement-
Play Games
更多相關文章
  • .NET web開發者在開發過程中,一定都踩過的坑,明明修改了js文件,可是部署到生產環境,客戶反饋說:“還是報錯啊”。。然後一臉懵逼的去伺服器上看文件,確實已經更新了。有經驗的coder可能就想到了,肯定是客戶端瀏覽器緩存搞的鬼。 此時會告訴客戶,請Crtl+F5刷新一下,這時,客戶會說:“Ctr ...
  • 前言 在兩年多以前就聽聞 Blazor 框架,是 .Net 之父的業餘實驗性項目,其目的是探索 .Net 與 WebAssembly 的相容性和應用前景。現在這個項目已經正式成為 Asp.Net Core 框架的一部分,公開了預覽版,官方教程也基本寫好上線了。就著這個機會,順便體驗一下這個框架用起來 ...
  • 本筆記摘抄自:https://www.cnblogs.com/PatrickLiu/p/8176974.html,記錄一下學習過程以備後續查用。 一、引言 今天我們要講行為型設計模式的第十個模式--備忘錄模式,先從名稱上來看。備忘錄模式可以理解為對某個對象的狀態進行保存,等到需要恢復的時 候,可以從 ...
  • 如今,當談到 WPF 時,我們言必稱 MVVM、框架(如 Prism)等,似乎已經忘了不用這些的話該怎麼使用 WPF 了。當然,這裡說的不用框架和 MVVM,並不是說像使用 Winform 那樣使用 WPF,而是追本溯源,重識 WPF 與生俱來的綁定和命令的風采。 ...
  • 微信公眾號:【 "Dotnet9的博客" 】,網站:【 "Dotnet9" 】,問題或建議:【 "請網站留言" 】, 如果對您有所幫助:【 "歡迎贊賞" 】。 開源C WPF控制項庫系列: "(一)開源C WPF控制項庫《MaterialDesignInXAML》" "(二)開源C WPF控制項庫《Pan ...
  • 本筆記摘抄自:https://www.cnblogs.com/PatrickLiu/p/8135083.html,記錄一下學習過程以備後續查用。 一、引言 今天我們要講行為型設計模式的第九個模式--訪問者模式。如果按老規矩,先從名稱上來看這個模式,我根本不能獲得任何對理解該模式有用的信息, 而且這個 ...
  • Linux命令學習 命令分類: 文件處理命令 許可權管理命令 文件搜索命令 幫助命令 用戶管理命令 壓縮解壓命令 網路命令 關機重啟命令 1、文件處理命令 命令格式:命令 [-選項] [參數] 例:ls -la /etc 說明:1)個別命令使用不遵循此格式 2)當有多個選項時,可以寫在一起 3)簡化選 ...
  • 消息隊列 為什麼要用消息隊列,都有什麼優缺點? 要問的是消息隊列都有哪些場景,然後項目里具體實現的什麼場景,你在這個場景里用的什麼消息隊列? 期望的回答是,你們公司有個什麼業務,這個業務場景有什麼技術挑戰,如果不用MQ可能會很麻煩,但是你現在用了MQ帶給你什麼好處? 場景比較多,但是比較核心的是3個 ...
一周排行
    -Advertisement-
    Play Games
  • 移動開發(一):使用.NET MAUI開發第一個安卓APP 對於工作多年的C#程式員來說,近來想嘗試開發一款安卓APP,考慮了很久最終選擇使用.NET MAUI這個微軟官方的框架來嘗試體驗開發安卓APP,畢竟是使用Visual Studio開發工具,使用起來也比較的順手,結合微軟官方的教程進行了安卓 ...
  • 前言 QuestPDF 是一個開源 .NET 庫,用於生成 PDF 文檔。使用了C# Fluent API方式可簡化開發、減少錯誤並提高工作效率。利用它可以輕鬆生成 PDF 報告、發票、導出文件等。 項目介紹 QuestPDF 是一個革命性的開源 .NET 庫,它徹底改變了我們生成 PDF 文檔的方 ...
  • 項目地址 項目後端地址: https://github.com/ZyPLJ/ZYTteeHole 項目前端頁面地址: ZyPLJ/TreeHoleVue (github.com) https://github.com/ZyPLJ/TreeHoleVue 目前項目測試訪問地址: http://tree ...
  • 話不多說,直接開乾 一.下載 1.官方鏈接下載: https://www.microsoft.com/zh-cn/sql-server/sql-server-downloads 2.在下載目錄中找到下麵這個小的安裝包 SQL2022-SSEI-Dev.exe,運行開始下載SQL server; 二. ...
  • 前言 隨著物聯網(IoT)技術的迅猛發展,MQTT(消息隊列遙測傳輸)協議憑藉其輕量級和高效性,已成為眾多物聯網應用的首選通信標準。 MQTTnet 作為一個高性能的 .NET 開源庫,為 .NET 平臺上的 MQTT 客戶端與伺服器開發提供了強大的支持。 本文將全面介紹 MQTTnet 的核心功能 ...
  • Serilog支持多種接收器用於日誌存儲,增強器用於添加屬性,LogContext管理動態屬性,支持多種輸出格式包括純文本、JSON及ExpressionTemplate。還提供了自定義格式化選項,適用於不同需求。 ...
  • 目錄簡介獲取 HTML 文檔解析 HTML 文檔測試參考文章 簡介 動態內容網站使用 JavaScript 腳本動態檢索和渲染數據,爬取信息時需要模擬瀏覽器行為,否則獲取到的源碼基本是空的。 本文使用的爬取步驟如下: 使用 Selenium 獲取渲染後的 HTML 文檔 使用 HtmlAgility ...
  • 1.前言 什麼是熱更新 游戲或者軟體更新時,無需重新下載客戶端進行安裝,而是在應用程式啟動的情況下,在內部進行資源或者代碼更新 Unity目前常用熱更新解決方案 HybridCLR,Xlua,ILRuntime等 Unity目前常用資源管理解決方案 AssetBundles,Addressable, ...
  • 本文章主要是在C# ASP.NET Core Web API框架實現向手機發送驗證碼簡訊功能。這裡我選擇是一個互億無線簡訊驗證碼平臺,其實像阿裡雲,騰訊雲上面也可以。 首先我們先去 互億無線 https://www.ihuyi.com/api/sms.html 去註冊一個賬號 註冊完成賬號後,它會送 ...
  • 通過以下方式可以高效,並保證數據同步的可靠性 1.API設計 使用RESTful設計,確保API端點明確,並使用適當的HTTP方法(如POST用於創建,PUT用於更新)。 設計清晰的請求和響應模型,以確保客戶端能夠理解預期格式。 2.數據驗證 在伺服器端進行嚴格的數據驗證,確保接收到的數據符合預期格 ...