From c76e301127919af7f117df92edeb08abd4cd4274 Mon Sep 17 00:00:00 2001 From: light <1870499383@qq.com> Date: Thu, 11 Jan 2018 00:18:10 +0800 Subject: [PATCH] =?UTF-8?q?iptables=20=E8=AE=BE=E7=BD=AE=E7=AB=AF=E5=8F=A3?= =?UTF-8?q?=E8=BD=AC=E5=8F=91?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../iptables_examples_network_topology.png | Bin 0 -> 17485 bytes static/img/iptables_frame.png | Bin 0 -> 38916 bytes ubuntu/iptables设置端口转发.md | 84 ++++++++++++++++++ 3 files changed, 84 insertions(+) create mode 100644 static/img/iptables_examples_network_topology.png create mode 100644 static/img/iptables_frame.png create mode 100644 ubuntu/iptables设置端口转发.md diff --git a/static/img/iptables_examples_network_topology.png b/static/img/iptables_examples_network_topology.png new file mode 100644 index 0000000000000000000000000000000000000000..968a35d0f2e7cfaa23636f12d0390180ffd5c3c2 GIT binary patch literal 17485 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
    GjiH$A(KKh8mrehz`} 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 Ny^W)F=1|Xd{}0v7Fk1is literal 0 HcmV?d00001 diff --git a/ubuntu/iptables设置端口转发.md b/ubuntu/iptables设置端口转发.md new file mode 100644 index 0000000..3c6f696 --- /dev/null +++ b/ubuntu/iptables设置端口转发.md @@ -0,0 +1,84 @@ +# iptables 设置端口转发/映射 + +## 网络拓扑 + +![iptables_examples_network_topology](../static/img/iptables_examples_network_topology.png) + + 服务器A有两个网卡 + 内网ip:192.168.1.3 + 外网ip:10.138.108.103 + 本地回环:127.0.0.1 + + 服务器B有网卡,8001提供服务 + 内网ip:192.168.1.1 + +## 目的 + + 使用户通过外网10.138.108.103:8001访问内网服务器192.168.1.1:8001 + +## 思路 + +![iptables_examples_network_topology](../static/img/iptables_frame.png) + +如图2所示,端口转发走的是下发A路,利用nat表中prerouting做dnat,用postrouting做snat + +### 包分析 + +时期 |操作|源IP:PORT|目的IP:PORT +------- |----|----|---- +packet in|用户访问|1.2.3.4:5|10.138.108.103:8001 +prerouting|dnat|1.2.3.4:5|192.168.1.1:8001 +routing decision|判断是否转发|1.2.3.4:5|192.168.1.1:8001 +postrouting|snat|10.138.108.103:X|192.168.1.1:8001 +packet out|转发包|10.138.108.103:X|192.168.1.1:8001 + +## 开启内核ip转发 + +> nano /etc/sysctl.conf + +将下项注释去掉 + +``` bash +# net.ipv4.ipv4_forward=1 +``` + +## 脚本 + +``` bash +#!/bin/bash +pro='tcp' + +src_host1='192.168.1.3' +src_host2='10.138.108.103' +src_port=8001 + +Dst_Host='192.168.1.1' +Dst_Port=8001 + +# 清空规则 +iptables -F +iptables -X +iptables -Z +iptables -t nat -F + +# Destination network address translate (dnat) + +# 如图2所示 +iptables -t nat -A PREROUTING -p $pro -d $src_host1 --dport $src_port -j DNAT --to $Dst_Host:$Dst_Port +iptables -t nat -A PREROUTING -p $pro -d $src_host2 --dport $src_port -j DNAT --to $Dst_Host:$Dst_Port + + +iptables -A FORWARD -p $pro -d $Dst_Host --dport $Dst_Port -j ACCEPT + +# 本地连接不经过prerouting,只经过output链,所以想要在服务器A通过本地ip访问服务器B需要在output 链增加dnat规则 +iptables -t nat -A OUTPUT -p $pro -d $src_host1 --dport $src_port -j DNAT --to $Dst_Host:$Dst_Port +iptables -t nat -A OUTPUT -p $pro -d $src_host2 --dport $src_port -j DNAT --to $Dst_Host:$Dst_Port + + + +# source network address translate (snat) +iptables -t nat -A POSTROUTING -p $pro -d $Dst_Host --dport $Dst_Port -j SNAT --to $src_host1 + +# 显示已有规则 +iptables -t nat -L -n --line-number +``` \ No newline at end of file