弄了一块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最后面添加监听网卡名称。

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

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

最新文章

  1. //解决validator验证插件多个name相同只验证第一的问题
  2. thinkphp里的session、cookie方法
  3. QT 数据库编程二
  4. python练习题代码
  5. web api 限制单个IP在一定时间内访问次数
  6. Linux 性能监测:Network
  7. 267. Palindrome Permutation II
  8. iOS之设置状态栏颜色
  9. Windows系统下Oracle数据库冷备
  10. 【转】iOS开发者申请发布证书及真机调试图文详解
  11. 软键盘 输入法管理器 InputMethodManager
  12. python3 urllib.request.urlopen() 地址打开错误
  13. Oracle Tablespace Transportation
  14. 【算法】RMQ LCA 讲课杂记
  15. Xenu-web开发死链接检测工具应用
  16. requests库入门10-超时,错误与异常
  17. AX_InventCounting
  18. weblogic对JSP预编译、weblogic读取JSP编译后的class文件、ant中weblogic.jspc预编译JSP
  19. 'autocomplete="off"'在Chrome中不起作用解决方案
  20. 黄聪:bootstrap的模态框modal插件在苹果iOS Safari下光标偏离问题解决方案

热门文章

  1. restframewor 版本(version)
  2. 头条一面竟然问我Maven?
  3. Java中整数值的4中表示方式u
  4. Docker windows nanoserver/mysql镜像root用户密码错误
  5. c#数字图像处理(十)图像缩放
  6. 使用Rclone和WinFsp挂载FTP为磁盘
  7. 剑指offer--二维数组中查找
  8. Docker底层架构之控制组
  9. 3.部署场景1:带有遗留的Open vSwitch
  10. 脚本实现统计osd内的pg数量