
弄了一塊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
大功告成,敬情享用吧!(終于可以皮了)