通过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实现共享上网及端口代理转发的主要内容,如果未能解决你的问题,请参考以下文章