情景
有這個想法的原因還是自己接觸了一段時間網絡,長期不滿於各種路由器套件的功能。現在能選擇的路由器系統也不多,用途最廣泛的Openwrt每次增減新功能都需要編譯,當然也有一些愛好者維護的可以持續更新的Openwrt系統,但始終不穩定,我也曾經在這類系統裡面吃過癟。於是我打算自己從Linux系統開始,一步一步搭一個簡單的家用Linux路由器。
環境介紹
路由器是很多年前購買的軟路由,CPU是J3455
- 四個網絡接口,分別為enp1s0,enp2s0,enp3s0,enp4s0
- 網絡DHCP獲取Public IP
方案選擇
選項 | 方案 |
---|---|
Linux發行版 | Debian |
Firewall | nftables |
DHCP&DNS | dnsmasq |
DHCPv6 | DHCPCD |
IPv6-rd | radvd |
配置本機網絡
安裝完Debian後,編輯 /etc/network/interface.d/enp1s0
auto enp1s0
iface enp1s0 inet dhcp
iface enp1s0 inet6 auto
建立網橋用於LAN
將LAN接口全部接入一個網橋,我的情況則是除了enp1s0以外的全部都接入LAN。
安裝網橋套件。
apt install bridge-utils -y
編輯 /etc/netwrok/interface.d/br0
auto br0
iface br0 inet static
address 10.0.0.254
broadcast 10.0.0.255
bridge_ports enp2s0 enp3s0 enp4s0
bridge_stp off
bridge_waitport 0
bridge_fd 0
netmask 255.255.255.0
記得開啟內核轉發。
net.ipv4.ip_forward=1
net.ipv6.conf.all.forwarding=1
配置nftables Nat轉換,使LAN口可以連接外網
現在如果將設備連接到LAN口,即便配置好機器也無法直接上網。我們需要配置NAT轉換,讓LAN口可以訪問外網的資源。
先安裝nftables防火墻。
apt install nftables
nano /etc/nftables.conf
配置nftables讀取 /etc/nftables/
目錄的配置
#!/usr/sbin/nft -f
flush ruleset
include "/etc/nftables/*.nft"
然後配置NAT,輸入 nano /etc/nftables/nat.nft
#! /usr/sbin/nft -f
table ip nat {
chain postrouting {
type nat hook postrouting priority srcnat; policy accept;
ip saddr 10.0.0.0/24 oifname "enp1s0" masquerade
}
chain prerouting {
type nat hook prerouting priority dstnat; policy accept;
}
}
將enp1s0更改為自己的WAN對應的網卡。然後執行以下命令啟動nftables。
systemctl enable nftables --now
這樣LAN口下面的機器就可以通過手動配置IP連接到外網了。
然後需要使用DNSMASQ或Adguard提供DNS和DHCP服務,下一篇繼續。