通过iptables实现共享上网及端口代理转发

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了通过iptables实现共享上网及端口代理转发相关的知识,希望对你有一定的参考价值。

参考技术A 虚拟机器1:
1、NAT网:192.168.183.131 (可上外网)
2、LAN网:10.0.0.1

虚拟机器2:
LAN网:10.0.0.100

虚拟机器3:
LAN网:10.0.0.200

目标:虚拟机器2和3 通过 虚拟机器1 共享上网
操作步骤:

以上完成,即可上网(共享上网,不需要开启防火墙)。

目标:通过访问虚拟机器1的80端口,代理访问虚拟机2的nginx80端口
操作步骤:

此时,在浏览器上,输入192.168.183.131 即可访问到nginx页面。
由此可见,iptables作端口转发,也是非常简单的(转发,不需要开启防火墙)。

PS:以上两种情况,相关配置情况:

相关命令集合:

Centos7极简单模式:
同样开启路由转发sysctl -w net.ipv4.ip_forward=1.

常见操作

实际案例

云服务器
一般云服务器只有内网网卡,外网IP是映射IP;
因此只要转发内网IP,然后开启路由转发即可。
开启路由转发: sysctl -w net.ipv4.ip_forward=1

iptables 共享上网 (NAT表的使用)

机房内网服务器无外网IP上不了网怎么办?

比如,机房有A B 两台服务器,A有外网IP地址,B没有外网IP地址,那B如何上网呢?

思路就是,把B的网关指向A服务器的内网地址,通过A服务器代理上网


iptables的高级应用 共享上网

举例如下:

网关服务器B:

ech0 10.0.0.51    外网地址   配上级网关

ech1 172.16.1.51  内网地址   不配网关

内网服务器C:

ech1 172.16.1.52 网关172.16.1.51


网关服务器B需要具备的条件

1 物理条件是双网卡,一块内网地址,一块外网地址

2 确保服务器网关B可以上网

3 内核文件/etc/sysctl.conf要开启转发功能

net.ipv4.ip_forward = 1

sysctl -p #使修改生效

4 iptables 的filter表的forward链允许转发

网关服务器的IPTABLES默认规则最好是ACCEPT


服务器C需要具备的条件

1 服务器C的默认网关是服务器B的内网地址

route -n

route del default gw 172.16.1.8

route -n

route add default gw 172.16.1.51


在网关服务器B上配一条规则允许服务器C上网

网关服务器B

1 载入内核模块

modprobe ip_tables

modprobe iptable_filter

modprobe iptable_nat

modprobe ip_conntrack

modprobe ip_conntrack_ftp

modprobe ip_nat_ftp

modprobe ipt_state


2 局域网共享的两条命令方法:

实现原理把服务器C的内网地址转换成网关服务器的外网地址,相当于是数据包到达网关B,再从B发出 ,好像数据包是B发出去的一样

方法1 :适合于有固定外网地址的:

iptables -t nat -A POSTROUTING  -s 172.16.1.52 -o eth0 -j SNAT -to-source 10.0.0.51

-A POSTROUTING 因为是离开防火墙去网关B服务器,所以用 POSTROUTING链

-s 172.16.1.52 服务器C的内网IP地址,可以改成网段 -s 172.16.1.0/24

-o eth0 网关服务器B的外网卡接口/可写可不写

-j SNAT -to-source 10.0.0.51 源地址转换成网关服务器B的外网卡IP地址

ping 203.81.19.1  测一下


方法2:适合变化的外网地址(ADSL)

iptables -t nat -A POSTROUTING  -s 172.16.1.52 -j MASQUERADE (伪装)


我用语言来描述一下这个过程:

假设服务器C172.10.1.52 要访问百度1.1.1.1(假设的地址) ;先是ARP内网广播,没人响应后去找网关,到了网关后,因为做了源地址转换,把服务器C的内网地址换成了网关服务器的外网卡地址,这样,网关服务器的外网卡地址就能找到百度的1.1.1.1,这样,服务器C就能上网了


地址解析协议,即ARP(Address Resolution Protocol),是根据IP地址获取物理地址的一个TCP/IP协议主机发送信息时将包含目标IP地址的ARP请求广播到网络上的所有主机,并接收返回消息,以此确定目标的物理地址。


有个疑问,包是出去了,那包回来是怎么找到服务器C的呢?


本文出自 “青春邓勇” 博客,请务必保留此出处http://dengyong.blog.51cto.com/8409869/1853420

以上是关于通过iptables实现共享上网及端口代理转发的主要内容,如果未能解决你的问题,请参考以下文章

iptables nat共享上网

iptables在我们的网络机房实现NAT共享上网

iptables项目案例1:局域网共享上网

用iptables做软路由实现共享上网

iptables 共享上网 (NAT表的使用)

防火墙iptables