双网卡linux主机组网配置(通过NAT实现内外网相互访问)
一。需求分析
由于实验室网络实行实名绑定制度,针对MAC地址绑定IP。本实验室原本有申请购买两个外网IP地址,IP 1绑定于网站服务器专用于提供网站服务,IP 2绑定于AP,用于实验室员工和其他服务器日常访问网络进行科研工作。
由于研究所调整布局,现在需要将服务器机柜整体搬迁到机房,而AP随人员调整到另一个房间。因此除绑定了IP的网站服务器器外,机柜中的其他路由器均不能访问互联网。所幸网站服务器拥有双网络,可以与其他服务器组建一个新的内网。
现在任务要求,
1.实验室人员可以通过互联网正常访问内网上的所有主机进行日常科研工作。
2.内网上的主机同样可以访问外网进行方便软件更新和资料下载。
二。系统配置和网络结构
实验室现有服务器多台,此处分别以内外网各一台为例,其网络及系统配置如下:
机器1:
==[硬件设备]==================
| 服务器名 | 操作系统 | 外网地址 | 内网地址 |
| A | centos 6.5 | em1 202.127.200.1 | em2 192.168.1.30 |
| B | ubuntu 14.04 | - | eth1 192.168.1.32 |
先上拓扑图:

三。指令实现
其实要实现这个功能也很简单,利用NAT进行端口转发,告诉数据包该从那条路就行了。使用centos自带的iptables防火墙功能即可。
1)外网访问内网:
我们从外网访问内网服务器主要是为了做远程控制SSH和访问jupyter的8888端口以便进行在线的python编程实验。
因此做了两组端口转发 a)从主机A的202.127.200.1网口的8080端口转发至主机B 192.168.1.32网口的8888端口访问jupyter服务
b)从主机A的202.127.200.1网口的26545端口转发至主机B 192.168.1.32网口的22端口运行SSH远程访问服务
第一步不忙配置转发规则,首先需要为双网卡配置静态路由,保证链路畅通。
在A主机上清空原有路由,添加以下三条:
route add -net 202.127.200.0 gw 202.127.200.1 netmask 255.255.254.0 dev em1#实现岛内访问,202.127.200.0/23为学院的内网地址
route add default 202.127.201.254 dev em1 #添加默认路由访问互联网
route add -net 192.168.1.0 gw 192.168.1.30 netmask 255.255.255.0 dev em2#内网路由
route -n 查看一下

保证A上有且只有这三条路由。不过这里的配置是临时的,可能重启主机或路由就没有了,但我搜了好多资料的访问都不能实现开机配置,有知道的请留言告诉我
同时对于B主机,要保证他的静态路由网关为A主机的内网地址

接下来配置转发规则
在A主机上
>echo "1"> /proc/sys/net/ipv4/ip_forward #修改当前系统内存中ip_forward的值,这是开启ip转发
![]()
已经开启了,先开始进行转发规则配置
>iptables -t nat -A PREROUTING -d 202.127.200.1 -p tcp --dport 8080 -j DNAT --to-destination 192.168.1.32:8888
#将[服务器A]的网卡em1中8080端口,指向至[服务器B]的网卡em1中8888端口;
>iptables -t nat -A POSTROUTING -d 192.168.1.32 -p tcp --dport 8888 -j SNAT --to 192.168.1.30
#将[服务器B]的网卡em1中8888端口,指向回[服务器A]的网卡em2;
>iptables -A FORWARD -o em2 -d 192.168.1.32 -p tcp --dport 8888 -j ACCEPT
>iptables -A FORWARD -i em2 -s 192.168.1.32 -p tcp --sport 8888 -j ACCEPT
#设置[服务器A]em2的转发规则,发送至[服务器B]的em1
这样就可以从外网通过【服务器A】的8080端口访问服务器B的8888端口,同理
iptables -t nat -A PREROUTING -d 202.127.200.1 -p tcp --dport 26545 -j DNAT --to-destination 192.168.1.32:22
iptables -t nat -A POSTROUTING -d 192.168.1.32 -p tcp --dport 22 -j SNAT --to 192.168.1.30
iptables -A FORWARD -o em2 -d 192.168.1.32 -p tcp --dport 22 -j ACCEPT
iptables -A FORWARD -i em2 -s 192.168.1.32 -p tcp --sport 22 -j ACCEPT
实现远程控制。
但这时候我们的服务器B还是不能访问外网。我们需要在A上为B的数据搭一座桥。同样利用转发规则:
>iptables -t nat -A POSTROUTING -s 192.168.1.0/24 -o em1 -j SNAT --to-source 202.127.200.1
#将所有来自192.168.1.0网络的数据流量都从A的em1口转出
保存我们设定的规则
>service iptables save
#将规则写入配置文件
>service iptables restart
# 重启防火墙
可能会有人当心这样重复配置是否会存在冲突,但我实际检验应该是可以的:
外网访问jupyter

内网服务器访问外网

问百度的访问量都是怎么来的???
大功告成,老板再也不怕我放假回去不能工作了
本文来自互联网用户投稿,文章观点仅代表作者本人,不代表本站立场,不承担相关法律责任。如若转载,请注明出处。 如若内容造成侵权/违法违规/事实不符,请点击【内容举报】进行投诉反馈!
