在配置网络服务时,经常需要把路由器或服务器上的某个外部端口指向内网中的一台设备。比如你在家里用树莓派搭了个网站,想让朋友从外网访问,就得做端口映射。而这个过程,很多时候离不开在终端窗口执行shell命令。
为什么要在终端里操作?
图形界面虽然方便,但很多高级网络设置,尤其是Linux服务器或路由器(如OpenWRT),直接通过命令行调整更高效。而且一旦熟悉了命令,几秒钟就能完成转发规则的添加,不用点来点去翻菜单。
常见的端口映射命令操作
以Linux系统上使用iptables为例,你想把进入本机8080端口的流量转给内网192.168.1.100的80端口,可以在终端窗口执行shell命令:
sudo iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
紧接着,还要确保数据能正确返回,通常要加上一条MASQUERADE规则:
sudo iptables -t nat -A POSTROUTING -j MASQUERADE
用systemd脚本自动加载规则
每次重启后iptables规则会丢失,可以写个简单的shell脚本保存规则。比如创建一个文件:
#!/bin/bash
# /usr/local/bin/setup-port-forward.sh
iptables -t nat -A PREROUTING -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.100:80
iptables -t nat -A POSTROUTING -j MASQUERADE
赋予执行权限:
chmod +x /usr/local/bin/setup-port-forward.sh
然后在开机脚本或systemd服务中调用它,一启动就自动完成端口映射。
别忘了开启IP转发
上面的规则要生效,系统必须允许IP转发。检查是否开启:
cat /proc/sys/net/ipv4/ip_forward
如果返回0,说明没开。临时开启:
echo 1 | sudo tee /proc/sys/net/ipv4/ip_forward
永久生效,编辑/etc/sysctl.conf,把net.ipv4.ip_forward=1这行取消注释或添加进去。
实际场景:远程看家里的摄像头
假设你有个摄像头接在局域网,地址是192.168.1.50,视频页面跑在8080端口。你在公司想看看家里情况,就可以在路由器的SSH终端执行命令:
iptables -t nat -A PREROUTING -p tcp --dport 9000 -j DNAT --to-destination 192.168.1.50:8080
然后用你家公网IP加9000端口访问,比如http://123.123.123.123:9000,就能打开摄像头页面。整个过程在终端窗口执行shell命令搞定,不需要登录管理页面来回点。
小技巧:查看当前规则
不确定规则有没有生效?查一下:
sudo iptables -t nat -L -n -v
这条命令列出所有NAT规则,看看你的转发是否在里面。如果发现写错了端口,可以用-D参数删除某条规则,重新加一遍。