ARM Linux双网卡设置转发

文章目录

      • 简介
      • 内核增加`netfilter`组件
      • 移植iptables
      • 制定转发规则
      • 最后

简介

一台嵌入式的设备,有两个网卡,一个是eth0,可以连接外网,另一个eth1,连接内部网络设备,比如网络摄像机。想通过eth0直接访问到网络摄像机,比如访问摄像机的主页,或者rtsp网络推视频流。

如下图所示

嵌入式设备
eth0:192.168.0.172
eth1:172.16.0.55
外部电脑:192.168.0.12/24
摄像机:172.16.0.60

查阅了资料,知道是用netfilter这个实现的。基本上要做以下的事情:

  • 内核需要添加netfilter组件
  • 需要移植iptables工具
  • 需要制定转发规则

之所以写这篇文章,是因为虽然试验成功了,但是不清楚原理,很容易就会遗忘,因此先记录下来,看以后是不是有机会能理解原理。

内核增加netfilter组件

Networking support -> Networking options -> Network packet filtering framework (Netfilter)

这里不熟悉,不了解哪些选项可以不选,因此把下图中标红的全部选上 了。

ARM Linux双网卡设置转发_第1张图片

Core Netfilter ConfigurationIP: Netfilter Configuration下一级菜单还有很多组件,我不熟悉,因此全部选上。

编译后得到新的内核文件烧到嵌入式设备中。

移植iptables

下载最新的iptables源码,是iptables-1.8.3.tar.bz2

解压后,.configure配置,makemake install得到最后的执行文件。

./configure --host=arm-hisiv600-linux --enable-static --disable-shared --prefix=your_install_dir --disable-ipv6 --disable-largefile
# your_install_dir根据自己安装到哪写,我一般用`pwd`/install,即安装到源目录的install中
make
make install

最后在your_install_dir中得到结果,如图

ARM Linux双网卡设置转发_第2张图片

我们要的只是your_install_dir/sbin中的iptablesiptables-restoreiptables-savextables-legacy-multi这四个文件。复制到嵌入式设备的/usr/sbin中。

制定转发规则

规则到现在我都没搞清楚,参考了很多别人的文章,没有完全照着做能行的。之后一边参考别人的做法,一遍尝试自己修改,虽然成功了,但是规则目前我没完全明白为什么这样可以,如果有清楚的请留言给我解释一下。规则如下:

首先开启转发

echo 1 > /proc/sys/net/ipv4/ip_forward

然后执行规则让外网电脑访问eth0的端口6123的能访问到摄像机的主页,即通过http://192.168.0.172:6123就能访问到http://172.16.0.60:80,规则如下

iptables -t nat -I PREROUTING -d 192.168.0.172 -p tcp --dport 6123 -j DNAT --to-destination 172.16.0.60:80
iptables -t nat -I POSTROUTING -d 172.16.0.60 -p tcp --dport 80 -j SNAT --to 172.16.0.55

再增加一个规则,让外网电脑通过视频播放网络流rtsp://192.168.0.172:6124/1就能访问到摄像机的rtsprtsp://172.16.0.60/1rtsp用的端口是554。规则如下:

iptables -t nat -I PREROUTING -d 192.168.0.172 -p tcp --dport 6124 -j DNAT --to-destination 172.16.0.60:554
iptables -t nat -I POSTROUTING -d 172.16.0.60 -p tcp --dport 554 -j SNAT --to 172.16.0.55

那主页访问这个来说,第一条规则,我的理解是进入嵌入式设备eth0的规则是PREROUTING这个,如果匹配这个条件:目标IP是192.168.0.172,而且协议是TCP,端口是6123。那么就执行DNAT动作,即把目标替换成172.16.0.60:80。

第二条规则,里面的--to我搜索了,搜索不到什么意思,只查到有--to-destination--to-source,谁知道第二条规则的意义请告知。这里我暂时理解成:从嵌入式机器出去的规则是POSTROUTING这个,如果匹配这个条件:目标IP是172.16.0.60,而且协议是TCP,端口是80,就把源地址替换成172.16.0.55。

最后

有两个问题没搞清楚,谁知道麻烦留言告知。

  • 内核组件,全选那两个组件占用内核空间还是挺大的,谁知道最小配置可以怎么配置?
  • 上面转发规则的准确含义倒是是什么?为什么能实现转发?

最后,推荐一个博客,写的很好。虽然我学习完后还是不理解这里的转发规则意义,以及为什么能实现转发,不过文章写得很清晰详细,值得学习。

朱双印个人日志里面的IPtables文章

你可能感兴趣的:(嵌入式开发,Linux)