方法一:
CentOS 下做端口映射/端口转发
==[实现目标]==================
[服务器A]有2块网卡,一块接内网,一块接外网,[服务器B]只有一块内网网卡;
访问[服务器A]的7890端口跳转至[服务器B]的80端口。
==[硬件设备]==================
服务器A
eth0 10.0.0.49 内网
eth1 192.168.0.222 外网
服务器B
eth0 10.0.0.10 内网
==[步骤实现]================== 1、 首先应该做的是/etc/sysctl.conf配置文件的 net.ipv4.ip_forward = 1 默认是0 这样允许iptalbes FORWARD。 2、 service iptables stop 3、 重新配置规则 iptables -t nat -A PREROUTING -d 192.168.0.222 -p tcp --dport 7890 -j DNAT --to-destination 10.0.0.10:80 iptables -t nat -A POSTROUTING -d 10.0.0.10 -p tcp --dport 80 -j SNAT --to 10.0.0.49 iptables -A FORWARD -o eth0 -d 10.0.0.10 -p tcp --dport 80 -j ACCEPT iptables -A FORWARD -i eth0 -s 10.0.0.10 -p tcp --sport 80 -j ACCEPT service iptables save 4、 启动iptables 服务, service iptables start ---[简易说明,可跳过]---------------------- iptables -t nat -A PREROUTING -d 192.168.0.222 -p tcp --dport 7890 -j DNAT --to-destination 10.0.0.10:80 #将[服务器A]的网卡eth1中7890端口,指向至[服务器B]的网卡eth0中80端口; iptables -t nat -A POSTROUTING -d 10.0.0.10 -p tcp --dport 80 -j SNAT --to 10.0.0.49 #将[服务器B]的网卡etch0中80端口,指向回[服务器A]的网卡eth0; iptables -A FORWARD -o eth0 -d 10.0.0.10 -p tcp --dport 80 -j ACCEPT #转发规则:[服务器A]网卡eth0 出 至[服务器B]的80端口; iptables -A FORWARD -i eth0 -s 10.0.0.10 -p tcp --sport 80 -j ACCEPT #转发规则:[服务器A]网卡eth0 入 至[服务器B]的80端口; service iptables save #将当前规则保存到 /etc/sysconfig/iptables 如果希望全端口转发可以使用*号代替指定端口号。 若你对这个文件很熟悉直接修改这里的内容也等于命令行方式输入规则,以下供参考。 --[/etc/sysconfig/iptables 文件内容]-------------- # Generated by iptables-save v1.4.7 on Tue Mar 28 20:26:23 2017 *nat :PREROUTING ACCEPT [5:322] :POSTROUTING ACCEPT [0:0] :OUTPUT ACCEPT [0:0] -A PREROUTING -d 192.168.0.222/32 -p tcp -m tcp --dport 7890 -j DNAT --to-destination 10.0.0.10:80 -A POSTROUTING -d 10.0.0.10/32 -p tcp -m tcp --dport 8086 -j SNAT --to-source 10.0.0.49 COMMIT # Completed on Tue Mar 28 20:26:23 2017 # Generated by iptables-save v1.4.7 on Tue Mar 28 20:26:23 2017 *filter :INPUT ACCEPT [1204:145670] :FORWARD ACCEPT [90:9051] :OUTPUT ACCEPT [595:85633] -A FORWARD -d 10.0.0.10/32 -o eth0 -p tcp -m tcp --dport 80 -j ACCEPT -A FORWARD -s 10.0.0.10/32 -i eth0 -p tcp -m tcp --sport 80 -j ACCEPT COMMIT # Completed on Tue Mar 28 20:26:23 2017 --------------------------------------------------- 添加端口: # /sbin/iptables -I INPUT -p tcp --dport 端口号 -j ACCEPT 保存设置:# /etc/rc.d/init.d/iptables save 查看是否添加成功:# /etc/init.d/iptables status | grep tcp
方法二:
果多台服务器,但是仅有一个公网ip的话,可以在有公网ip的服务器上做端口映射/端口转发,把不同的服务器映射在端口上。这样只要链接唯一公网IP的不同端口就可以在对应的不同服务器上进行操作了。
本文介绍的是centos7,firewalld-cmd是centos7的一大特性,最大的好处有两个:支持动态更新,不用重启服务;第二个就是加入了防火墙的“zone”概念。
firewall常用操作示例:
状态:# systemctl status firewalld 或者 firewall-cmd --state(查看防火墙开启关闭状态) 启动:# systemctl start firewalld 停止:# systemctl stop firewalld 自启动:# systemctl enable firewalld (可让防火墙开机自启动,防火墙默认开机不启动的,需手动启动) 禁用:# systemctl disable firewalld
允许数据包转发
首先开启IP转发功能,默认是关闭的。
临时修改:
echo 1 >/proc/sys/net/ipv4/ip_forward
修改过后就马上生效,但如果系统重启后则又恢复为默认值0。
永久修改:
# 找到下面的值并将0改成1 vi /etc/sysctl.conf # sysctl -p(使之立即生效) net.ipv4.ip_forward = 1
默认值0
是禁止ip转发,修改为1
即开启ip转发功能。
端口管理
列出 dmz 级别的被允许的进入端口 firewall-cmd --zone=dmz --list-ports 允许 tcp 端口 8080 至 dmz 级别 (--permanent 永久生效,没有此参数重启后失效) firewall-cmd --zone=dmz --add-port=8080/tcp firewall-cmd --zone=dmz --add-port=12345/tcp --permanent 列出 public 级别的被允许的进入端口 firewall-cmd --zone=public --list-ports 允许某范围的 udp 端口至 public 级别,并永久生效 firewall-cmd --zone=public --add-port=5060-5059/udp --permanent 允许 tcp 端口 58888 至 public 级别 (--permanent 永久生效,没有此参数重启后失效) firewall-cmd --zone=public --add-port=80/tcp --permanent 重新加载firewalld配置 firewall-cmd --reload
打开防火墙伪装IP
决定你端口转发是否能成功的最重要一点是你得打开防火墙伪装IP的功能,这就是SNAT。
firewall-cmd --query-masquerade # 检查是否允许伪装IP,返回no表示没开启,反之开启伪装IP firewall-cmd --add-masquerade # 允许防火墙伪装IP firewall-cmd --add-masquerade --permanent # --permanent 永久生效,没有此参数重启后失效 或 firewall-cmd --zone=区域 --add-masquerade firewall-cmd --remove-masquerade# 禁止防火墙伪装IP 重新加载firewalld配置 firewall-cmd --reload (PS:添加或删除端口后不会立即生效,配置完 --reload后才能生效;--permanent代表永久生效)
下面是端口转发的命令
firewall-cmd --add-forward-port=port=80:proto=tcp:toport=8080 --permanent # 将80端口的流量转发至8080 firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.1.0.1 --permanent # 将80端口的流量转发至192.168.0.1 firewall-cmd --add-forward-port=port=80:proto=tcp:toaddr=192.168.0.1:toport=8080 --permanent # 将80端口的流量转发至192.168.0.1的8080端口 firewall-cmd --add-forward-port=port=58888:proto=tcp:toaddr=47.97.184.137:toport=80 --permanent # 将58888端口的流量转发至47.97.184.137的80端口 要删除之前设置的转发规则,把以上命令中的--add-forward-port改为--remove-forward-port运行一次即可。 firewall-cmd --permanent --zone=public --remove-forward-port=port=58888:proto=tcp:toaddr=47.97.184.137:toport=8888 firewall-cmd --reload firewall-cmd --list-all #查询所有配置
重新加载firewalld配置,并查看之前的配置
firewall-cmd --reload firewall-cmd --list-all
已有 508 位网友参与,快来吐槽:
发表评论