天天看點

arch linux 添加路由,将你的Archlinux打造成路由器

arch linux 添加路由,将你的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最後面添加監聽網卡名稱。

arch linux 添加路由,将你的Archlinux打造成路由器

然後設定開機自啟,順便也讓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

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