你的浏览器版本过低,可能导致网站不能正常访问!
为了你能正常使用网站功能,请使用这些浏览器。

Linux/Windows下实现端口映射

[复制链接]
gaosmile 发布时间:2020-11-19 21:43
通常服务器会有许多块网卡,因此也可能会连接到不同的网络,在隔离的网络中,某些服务可能会需要进行通信,此时服务器经过配置就可以承担起了转发数据包的功能。
一、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的所有端口映射情况

  1. & \5 q4 `) p2 [( s( N0 o
  2. netsh interface portproxy show v4tov4 | find "[IP]"
    * g1 x: t: l+ }2 {* S* N! O- \
  3. 例:
    4 M3 A+ B, L: P4 W+ o
  4. 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. 增加一个端口映射

  1. . s3 J1 J7 f8 W
  2. netsh interface portproxy add v4tov4 listenaddress=[外网IP] listenport=[外网端口] connectaddress=[内网IP] connectport=[内网端口]
    7 E1 z, u5 T. r- E: t
  3. 例:
    6 P( O! V! o& p* D3 m- t" H% p
  4. 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. 删除一个端口映射
  1. 8 k; k7 @3 z! t: o+ v+ o; `
  2. netsh interface portproxy delete v4tov4 listenaddress=[外网IP] listenport=[外网端口]$ [# r! T1 F8 y/ w+ _
  3. 例:
    - q& w8 u( l/ c  F6 P2 `
  4. netsh interface portproxy delete v4tov4 listenaddress=2.2.2.2 listenport=8080
复制代码
% @+ D& v( `9 H( B/ {
二、Linux下端口映射
1. 允许数据包转发
  1. 9 U; k$ ?1 w0 l) W4 F& [+ _
  2. echo 1 >/proc/sys/net/ipv4/ip_forward
    " y* D+ `+ n6 _
  3. iptables -t nat -A POSTROUTING -j MASQUERADE- D. }2 @  i- n( C$ e6 k
  4. iptables -A FORWARD -i [内网网卡名称] -j ACCEPT1 x, E( r8 O+ v
  5. iptables -t nat -A POSTROUTING -s [内网网段] -o [外网网卡名称] -j MASQUERADE* z7 ?  A# m2 {' e# z8 D6 J

  6. & w" E, T6 t- c5 e
  7. 例:/ H1 o. |2 O, W- H, S% Y/ _: I+ o$ K
  8. echo 1 >/proc/sys/net/ipv4/ip_forward
    - m- J/ ]5 r! K% P5 x0 p+ q7 X0 X
  9. iptables -t nat -A POSTROUTING -j MASQUERADE
    2 }% h- i5 [3 l4 c+ n/ r
  10. iptables -A FORWARD -i ens33 -j ACCEPT
    0 Q* v1 w; h( O: z
  11. 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. 设置端口映射
  1. 5 u! V$ k5 h7 C% K
  2. iptables -t nat -A PREROUTING -p tcp -m tcp --dport [外网端口] -j DNAT --to-destination [内网地址]:[内网端口]
    1 m; \4 Q- O' u" C- @' ]
  3. 例:1 w, q% ?. k! T5 F+ j. n
  4. 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
实验拓扑
微信图片_20201119214039.png
内网和外网是相对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服务
  1. + o4 J  T, c# Y8 O8 m1 \
  2. cd ~
    - H% @8 h; G% F& I& q
  3. echo "server1" > index.html
    , U' x0 a5 M: k! F, H
  4. python -m SimpleHTTPServer 8080
复制代码
+ K/ E, f% o$ [1 }8 f

6 e4 a: |# @% _: b8 e0 ]
微信图片_20201119214043.png
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
微信图片_20201119214046.png
在client上访问Server2的资源

$ s5 U5 O* k* q! g, r* _
' {; b7 m2 B( P, ?7 }: K5 f1 V
微信图片_20201119214049.png
在client上访问Server3的资源

' I2 E8 F2 I# h- M; [- Q  B' }

, S8 }1 S6 F: Q; z- V5 h: }  x$ t/ y
微信图片_20201119214052.png
可以看到,外网的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
  1. % i9 b# ^* c$ n5 x
  2. #允许数据包转发
    6 A1 j$ |( e# E  }' ~
  3. echo 1 >/proc/sys/net/ipv4/ip_forward
    6 L+ p' `; ?% Z$ O
  4. iptables -t nat -A POSTROUTING -j MASQUERADE- f1 @9 r) y/ [
  5. iptables -A FORWARD -i ens33 -j ACCEPT8 \' S8 n6 G2 ]1 Q0 ]* ]$ \# W
  6. iptables -t nat -A POSTROUTING -s 192.168.50.0/24 -o ens37 -j MASQUERADE
    - }& j' R3 |' E6 s$ D
  7. #设置端口映射" K6 `9 ?$ p% t8 f1 ]7 y
  8. 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
  9. 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
微信图片_20201119214055.png
在client上访问Server2的资源

" q1 ]7 _; m* s# y) c

  j+ ]: k1 D' a0 c6 |6 K

: v+ d1 ?! k" h1 \9 c% t" B! \& k
微信图片_20201119214058.png
在client上访问Server3的资源
. V3 y% x# y3 v) Y2 ]% z$ b5 Q
& J6 X8 g( L) f( G* i- R
微信图片_20201119214102.png

如果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
微信图片_20201119214105.png
配置并查看端口映射情况

  1. 6 V" @. G4 G2 C+ y' U9 S
  2. 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
  3. 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
  4. netsh interface portproxy show v4tov4
复制代码
* J% R+ m& d) c) `9 a1 M
微信图片_20201119214108.png
检查效果
在client节点上

  1. 4 b' N$ ?2 F. Y6 x3 b% h/ n( A: C+ q
  2. curl http://172.16.2.105:8081/index.html( s2 K% u; \" D/ ?; ~9 V- b% H
  3. curl http://172.16.2.105:8082/index.html
    3 q# k# {& s& u4 |, P. [- K
  4. curl http://172.16.2.11:8080/index.html
复制代码
/ N/ h2 f% h5 o8 I8 A9 H/ {1 g4 I
微信图片_20201119214111.png

4 o% X4 x% w' G% c
赞 收藏 评论0 发布时间:2020-11-19 21:43

举报

0个回答
关于
我们是谁
投资者关系
意法半导体可持续发展举措
创新与技术
意法半导体官网
联系我们
联系ST分支机构
寻找销售人员和分销渠道
社区
媒体中心
活动与培训
隐私策略
隐私策略
Cookies管理
行使您的权利
官方最新发布
人形机器人运动控制、感知与智能配电
半导体创新技术与应用方向
EE架构与软件定义汽车
12V/48V 汽车智能配电(SPD)
区域控制单元(ZCU)与分区架构
关注我们
st-img 微信公众号
st-img 手机版