• 将你的Archlinux打造成路由器


    route.jpeg

    弄了一块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替换成你自己的(如eth0enp0s0之类),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最后面添加监听网卡名称。

    dhcpd.jpeg

    然后设置开机自启,顺便也让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
    

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

  • 相关阅读:
    【洛谷P3834】【模板】可持久化线段树1
    【JZOJ3054】祖孙询问【LCA】
    【JZOJ3054】祖孙询问【LCA】
    【洛谷P3919】【模板】可持久化数组【主席树】
    【洛谷P3919】【模板】可持久化数组【主席树】
    【CF735D】Taxes【数论,数学】
    【CF735D】Taxes【数论,数学】
    字符串常量String
    nextInt和nexLine
    next与nextLine
  • 原文地址:https://www.cnblogs.com/firebet/p/14171160.html
Copyright © 2020-2023  润新知