虚拟路由器

将开发板配置为虚拟路由器就是使用SNAT对网络地址进行变换,将局域网内的IP转换为统一的公网IP,使得多个局域网设备可以使用一个IPV4地址访问互联网。

虚拟路由器实际使用的是netfilter/iptables工具进行配置。其中netfilter模块在内核中,iptables是应用层工具。在实际的应用中通过iptables在应用层对netfilter进行配置。因此需要在内核中配置支持netfilter,同时需要移植iptables工具。

【注】:本文仅介绍如何配置,不介绍iptables的具体使用方法以及网络数据包的流转路径。详细原理参考其它文章

一、iptables移植

参看根目录下工具移植.md的iptables部分

二、netfilter配置

本次的设置仅需要使能两个TARGET:NETFILTER_XT_NAT、IP_NF_TARGET_MASQUERADE

除此之外还有其它目标可以选,对应iptables的不同功能。如果没有对应的模块,使用时会提示未加载模块的异常。

需要记录日志需要使能:LOG目标

需要拦截指定的数据包:开启filter表,使能REJECT目标

需要匹配指定的协议类型:需要开启对应的协议支持

三、路由设置

每次上电执行

1
2
3
4
5
6
# 开启转发
echo 1 > /proc/sys/net/ipv4/ip_forward
# 配置iptables表,启用路由功能
iptables -t nat -A POSTROUTING -o wwan0 -j MASQUERADE
# 查看表项
iptables -t nat -L

或者通过下面的方式保存配置

1
2
3
4
5
6
7
# 配置开启转发
# net.ipv4.conf.all.rp_filter=0
echo "net.ipv4.ip_forward=1" >> /etc/sysctl.conf
# 配置iptables表,启用路由功能
iptables -t nat -A POSTROUTING -o wwan0 -j MASQUERADE
# 保存iptables配置
iptables-save > /etc/iptables.conf

每次上电时加载配置

1
2
3
4
# 加载内核参数
sysctl -p
# 加载iptables规则
iptables-restore < /etc/iptables.conf
0%