树莓派自启动配置端口映射及启动jar
背景
项目需要用树莓派代理摄像头,使外部只能通过树莓派才能访问摄像头。树莓派4B有两张网卡,一张有线一张无线,打算使用有线网卡连接摄像头。由于rtsp流树莓派不知道怎样转发,所以使用iptables实现端口映射来代理。
过程
-
摄像头配置静态IP。宇视摄像头有EZTools这个软件可以修改配置,可以去官网下载。
-
树莓派有线网卡配置静态IP,这个IP要为摄像头的网关(不然收不到响应,可能与这个摄像头有些关系,我测试端口映射到其他程序,这个IP在同一个网络下就行)
sudo vim /etc/dhcpcd.conf
然后重启
-
开启网络转发
sudo vim /etc/sysctl.conf #将net.ipv4.ip_forward=0更改为net.ipv4.ip_forward=1 sysctl -p #使数据转发功能生效
-
配置开机自启动及端口映射、启动jar
sudo apt install iptables #记得安装iptables sudo vim /etc/rc.local
在exit0前,添加如下内容。
sudo iptables -t nat -A PREROUTING -i wlan0 -p tcp --dport 554 -j DNAT --to-destination 192.168.1.2:554 #将从网卡wlan0进入且目标端口为554的包转发到192.168.1.2:554(摄像头rtsp) sudo iptables -t nat -A POSTROUTING -d 192.168.1.2 -p tcp --dport 554 -j MASQUERADE #将源IP为192.168.1.2:554的包的源地址进行伪装 cd /home/pi #jar包所在路径 java -jar device-0.0.1-SNAPSHOT.jar
启动后截图
wireshark抓包,可见摄像头ip(192.168.100.2)已改为树莓派wlan0IP(192.168.0.103)
RTSP流截图
一些可能用到的命令
sudo systemctl status rc-local #查看系统启动项状态
sudo iptables -t nat -nvL --line-number #查看nat表
sudo iptables -t nat -D POSTROUTING 1 #删除序号为1的POSTROUTING下规则
sudo iptables -t nat -D PREROUTING 1 #删除序号为1的PREROUTING下规则
参考资料
iptables实现端口映射(本地和远程端口映射) - dzqabc - 博客园 (cnblogs.com)
/etc/profile, rc.local等文件的执行顺序_chao09_01的博客-CSDN博客_/etc/profile rc.local