弄了一块 J2900 双千兆网口的工控板回来 (奇怪的型号) 当软路由用, 无奈我又想各种皮, 还想装桌面环境配 VNC, 而且我还对虚拟机不感冒(况且这 U 还不支持直通), 只得放弃所有路由器系统. 作为一名 Arch 铁粉, 追求无定制纯原生, 便决定装 Arch Linux 然后变之为路由器. Arch Linux 的安装就不谈了, 只讲跟标题有关的事. 步骤简单美丽, 其他 Linux 发行版若想食用需自行领会.
首先, 你需要一台双网口的电脑(单网口想弄 Wi-Fi 的自行体会), 最小化安装了 Arch Linux(已经安装了别的东西也不要紧, 只是网络配置部分需自行调整), 推荐在 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 为 Arch Linux 自带):
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 服务器, 可替换, subnet-mask 是子网掩码, 基本不用管, routers 是网关地址, 注意和之前 netctl 的 Address 匹配, subnet 必须是 x.x.x.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
大功告成, 敬情享用吧!(终于可以皮了)
来源: https://www.cnblogs.com/wendster/p/make-your-archlinux-server-to-a-home-router.html