发布于2026-07-13 阅读(0)
扫一扫,手机访问
说到Linux下的端口转发,很多人第一反应是装个nginx或者用socat之类的东西。但其实,系统自带的iptables就能把这事儿干得漂漂亮亮的,而且性能损耗极低。今天就聊聊怎么用iptables做端口转发,从最基础的安装配置到规则保存,一步不落。

先确认一下系统里有没有iptables。大部分Linux发行版默认都带了,如果没有,装一下也很简单:
sudo apt-get update
sudo apt-get install iptables
Linux内核默认是关掉IP转发这个功能的——毕竟普通电脑不需要当路由器。要打开它,需要修改一个内核参数。
编辑 /etc/sysctl.conf 文件:
sudo nano /etc/sysctl.conf
找到这一行,把注释去掉,值改成1:
net.ipv4.ip_forward=1
保存退出后,让配置立即生效:
sudo sysctl -p
假设你要把外部端口8080上的流量,转发到内网一台服务器的80端口。这就需要在NAT表里加两条规则。
这条规则告诉iptables:凡是目标端口是8080的TCP包,通通改掉目标地址,扔给内网的192.168.1.100:80。
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 -p tcp -d 192.168.1.100 --dport 80 -j MASQUERADE
重启之后规则就没了,这可是个坑。得把它们存起来。
装一个工具就能自动保存:
sudo apt-get install iptables-persistent
安装过程中会问你“是否保存当前规则”,选“是”就行。
如果不想多装东西,直接手动导出也行:
sudo sh -c "iptables-sa ve > /etc/iptables/rules.v4"
规则配好之后,拿telnet或者curl试试看:
telnet your-router-ip 8080
或者
curl http://your-router-ip:8080
要是能看到内网服务器的响应,说明成了。
按上面这些步骤走下来,iptables端口转发基本就稳了。下次再遇到类似需求,完全可以抛弃那些花里胡哨的方案,内核原生能力往往才是最靠谱的。
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
售后无忧
立即购买>office旗舰店
正版软件
正版软件
正版软件
正版软件
正版软件
1
2
3
7
8