不使用OpenWRT,直接在Linux上配置NAT作为网关转发网络流量

不使用OpenWRT,直接在Linux上配置NAT作为网关转发网络流量

动机

校园网一个账号只能允许一个MAC上网,而我同时有arm单板计算机(简称SBC,类似树莓派的玩意儿)和台式机各一台,很自然会想到这种方案:在SBC上跑openwrt,认证,转发台式机流量。

但面临着如下限制:

  1. SBC上只有一个网口,而上级路由器要求必须通过DHCP获取IP(但是获取之后就是一直和MAC地址绑定),否则无法在内网通信,解决办法是花十几块买个免配置的交换机
  2. SBC上跑了其他服务,刷OpenWRT并不现实,尝试用Docker跑发现不稳定,重启后容易断网

很显然,抛弃OpenWRT直接利用Linux转发是一种更好的解决方案。

实施

  1. 打开内核转发
echo "net.ipv4.ip_forward=1" | tee -a /etc/sysctl.conf
  1. 允许所有数据包通过(注意安全风险)
iptables -A FORWARD -j ACCEPT
  1. 设置转发规则,将所有从 eth0 接口发出的数据包的源地址修改为 eth0 接口当前的 IP 地址
iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
  1. 持久化iptables规则
apt install iptables-persistent
netfilter-persistent  save
  1. 将台式机网关修改为SBC的IP地址即可
ON THIS PAGE