|
通常服务器会有许多块网卡,因此也可能会连接到不同的网络,在隔离的网络中,某些服务可能会需要进行通信,此时服务器经过配置就可以承担起了转发数据包的功能。 一、Windows下实现端口映射1. 查询端口映射情况
4 q# p, I, |# h' V9 Q% P: k* B
- netsh interface portproxy show v4tov4
+ F! q# x4 L g- m; V& M, U( n
: `9 B1 u) `) Z* M% P+ ] Y5 p, ]
2. 查询某一个IP的所有端口映射情况
& \5 q4 `) p2 [( s( N0 o- netsh interface portproxy show v4tov4 | find "[IP]"
* g1 x: t: l+ }2 {* S* N! O- \ - 例:
4 M3 A+ B, L: P4 W+ o - netsh interface portproxy show v4tov4 | find "192.168.1.1"
0 _3 k. j5 C# H
复制代码
9 y6 K! v( c7 e; F" d8 Z( v+ T
3. 增加一个端口映射
. s3 J1 J7 f8 W- netsh interface portproxy add v4tov4 listenaddress=[外网IP] listenport=[外网端口] connectaddress=[内网IP] connectport=[内网端口]
7 E1 z, u5 T. r- E: t - 例:
6 P( O! V! o& p* D3 m- t" H% p - netsh interface portproxy add v4tov4 listenaddress=2.2.2.2 listenport=8080 connectaddress=192.168.1.50 connectport=80
复制代码1 x+ L. o7 {. s1 d; g( x1 U& L
4. 删除一个端口映射 - 8 k; k7 @3 z! t: o+ v+ o; `
- netsh interface portproxy delete v4tov4 listenaddress=[外网IP] listenport=[外网端口]$ [# r! T1 F8 y/ w+ _
- 例:
- q& w8 u( l/ c F6 P2 ` - netsh interface portproxy delete v4tov4 listenaddress=2.2.2.2 listenport=8080
复制代码% @+ D& v( `9 H( B/ {
二、Linux下端口映射1. 允许数据包转发 - 9 U; k$ ?1 w0 l) W4 F& [+ _
- echo 1 >/proc/sys/net/ipv4/ip_forward
" y* D+ `+ n6 _ - iptables -t nat -A POSTROUTING -j MASQUERADE- D. }2 @ i- n( C$ e6 k
- iptables -A FORWARD -i [内网网卡名称] -j ACCEPT1 x, E( r8 O+ v
- iptables -t nat -A POSTROUTING -s [内网网段] -o [外网网卡名称] -j MASQUERADE* z7 ? A# m2 {' e# z8 D6 J
& w" E, T6 t- c5 e- 例:/ H1 o. |2 O, W- H, S% Y/ _: I+ o$ K
- echo 1 >/proc/sys/net/ipv4/ip_forward
- m- J/ ]5 r! K% P5 x0 p+ q7 X0 X - iptables -t nat -A POSTROUTING -j MASQUERADE
2 }% h- i5 [3 l4 c+ n/ r - iptables -A FORWARD -i ens33 -j ACCEPT
0 Q* v1 w; h( O: z - iptables -t nat -A POSTROUTING -s 192.168.50.0/24 -o ens37 -j MASQUERADE
复制代码
% @0 ^( s v! y1 \0 J. n# O3 D6 Q
2. 设置端口映射 - 5 u! V$ k5 h7 C% K
- iptables -t nat -A PREROUTING -p tcp -m tcp --dport [外网端口] -j DNAT --to-destination [内网地址]:[内网端口]
1 m; \4 Q- O' u" C- @' ] - 例:1 w, q% ?. k! T5 F+ j. n
- iptables -t nat -A PREROUTING -p tcp -m tcp --dport 6080 -j DNAT --to-destination 10.0.0.100:6090
复制代码 U7 [1 Y9 Z4 |3 l. S
实验:将部署在内网的服务映射到外网
; o. G9 S, ~; k" s0 f实验环境VMWare Workstation Pro 5台最小化安装的centos 7虚拟机
0 Y7 F, o8 o% i9 r7 I) s) H
A* y$ ~- B" [: ^) t1 B5 P8 E实验拓扑内网和外网是相对Server4来说的。
* j* L9 B, |9 Z, hServer1和Server2为内网环境的两台服务器;
, m, j$ }# m% [ t8 JServer3为外网环境下的一台服务器;
0 i3 z# M" q/ y. e2 GServer4为一台双网卡主机,分别连接192.168.50.0/24和172.16.2.0/24两个网络。 # G9 U+ C2 l5 B
配置实验环境3 N; A+ S+ ]$ G+ G5 `
1. Server1,2,3上搭建HTTP服务用Python在Server1上搭建一个简单的HTTP服务 - + o4 J T, c# Y8 O8 m1 \
- cd ~
- H% @8 h; G% F& I& q - echo "server1" > index.html
, U' x0 a5 M: k! F, H - python -m SimpleHTTPServer 8080
复制代码 + K/ E, f% o$ [1 }8 f
6 e4 a: |# @% _: b8 e0 ]
Server2、Server3同理 # H# J% |- p5 q2 V% H, T7 i. Y+ @9 f
对照实验在client上访问Server1的资源 W% m; Q9 ^6 J: K
3 `* v) ^2 U" i: s7 T
在client上访问Server2的资源
$ s5 U5 O* k* q! g, r* _
' {; b7 m2 B( P, ?7 }: K5 f1 V
在client上访问Server3的资源
' I2 E8 F2 I# h- M; [- Q B' }
, S8 }1 S6 F: Q; z- V5 h: } x$ t/ y
可以看到,外网的client是无法访问内网Server1,Server2的资源的。 # X2 l8 a3 y$ [( w: {) e
在Server4上配置端口映射
# _! W2 k6 C$ K5 K3 K
临时配置0 \; N5 v! X* z8 A' [9 {. n9 O
- % i9 b# ^* c$ n5 x
- #允许数据包转发
6 A1 j$ |( e# E }' ~ - echo 1 >/proc/sys/net/ipv4/ip_forward
6 L+ p' `; ?% Z$ O - iptables -t nat -A POSTROUTING -j MASQUERADE- f1 @9 r) y/ [
- iptables -A FORWARD -i ens33 -j ACCEPT8 \' S8 n6 G2 ]1 Q0 ]* ]$ \# W
- iptables -t nat -A POSTROUTING -s 192.168.50.0/24 -o ens37 -j MASQUERADE
- }& j' R3 |' E6 s$ D - #设置端口映射" K6 `9 ?$ p% t8 f1 ]7 y
- iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8081 -j DNAT --to-destination 192.168.50.11:8080
7 {' ?1 k2 P: x9 F1 x - iptables -t nat -A PREROUTING -p tcp -m tcp --dport 8082 -j DNAT --to-destination 192.168.50.12:8080
复制代码4 \% s+ ^! B% ^% a
永久配置: ^% R9 E- [ X
如果需要永久配置,则将以上命令追加到/etc/rc.local文件。 检查效果在client上访问Server1的资源
& |; ^( G4 T( { i, Z; x
$ c; `' ^, ]" g1 S* R1 y
在client上访问Server2的资源
" q1 ]7 _; m* s# y) c
j+ ]: k1 D' a0 c6 |6 K
: v+ d1 ?! k" h1 \9 c% t" B! \& k在client上访问Server3的资源 . V3 y% x# y3 v) Y2 ]% z$ b5 Q
& J6 X8 g( L) f( G* i- R
如果Server4为Windows,替换一下相应的命令即可
( Q' L- P0 r/ ?! s* F
Windows的IP信息如下 [td]网卡 | IP地址 | 子网掩码 | 默认网关 | 备注 | Ethernet0 | 192.168.50.105 | 255.255.255.0 | - | 内网网卡 | Ethernet1 | 172.16.2.105 | 255.255.255.0 | - | 外网网卡 |
' r d q/ a- F7 D
配置并查看端口映射情况
6 V" @. G4 G2 C+ y' U9 S- netsh interface portproxy add v4tov4 listenaddress=172.16.2.105 listenport=8081 connectaddress=192.168.50.11 connectport=8080
/ A) ]1 ]/ V$ f) j$ i4 D/ N) w. Q - netsh interface portproxy add v4tov4 listenaddress=172.16.2.105 listenport=8082 connectaddress=192.168.50.12 connectport=8080
7 @+ ], P m3 y* X6 A( O0 Q - netsh interface portproxy show v4tov4
复制代码* J% R+ m& d) c) `9 a1 M
检查效果 在client节点上
4 b' N$ ?2 F. Y6 x3 b% h/ n( A: C+ q- curl http://172.16.2.105:8081/index.html( s2 K% u; \" D/ ?; ~9 V- b% H
- curl http://172.16.2.105:8082/index.html
3 q# k# {& s& u4 |, P. [- K - curl http://172.16.2.11:8080/index.html
复制代码 / N/ h2 f% h5 o8 I8 A9 H/ {1 g4 I
4 o% X4 x% w' G% c |