弄了一塊J2900雙千兆網口的工控板回來(奇怪的型號)當軟路由用,無奈我又想各種皮,還想裝桌面環境配VNC,而且我還對虛擬機不感冒(況且這U還不支持直通),只得放棄所有路由器系統。作為一名Arch鐵粉,追求無定製純原生,便決定裝Archlinux然後變之為路由器。Archlinux的安裝就不談了,只 ...
弄了一塊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替換成你自己的(如eth0
、enp0s0
之類),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
最後面添加監聽網卡名稱。
然後設置開機自啟,順便也讓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
大功告成,敬情享用吧!(終於可以皮了)