一、iptables的相关知识
1、这张图很重要,让我们明白iptables各个chain的流程关系
2、整个chain是从prerouting入,到postrouting出。
input和output都是针对运行中的监听进程而言,不是网卡,也不是主机。
数据包到路由,路由通过路由表判断数据包的目的地。如果目的地是本机,就把数据包转给intput。如果目的地不是本机,则把数据包转给forward处理,通过forward处理后,再转给postrouting处理。
3、table:filter和nat
filter,只操作与本机有关的数据包。相关的chain有input、output、forward
nat,用于NAT地址转换。只有数据流的第一个数据包被这个链匹配,后面的包会自动做相同的处理。相关的chain有prerouting、postrouting、output。
iptables操作的默认是filter表,如果要操作nat加-t nat
4、nat的方式:DNAT、SNAT、MASQUERADE
DNAT,目标地址转换,即替换数据包的目标地址,可用于将访问重定向到其他主机。需用--to-destination指定新目标地址。
SNAT,源地址转换,替换数据包的源地址,隐藏本地网络,内网对外网的访问。需用--to-source指定新源地址。
MASQUERADE,也是源地址转换,与SNAT不同的是,不需要指定新源地址,而是自动去取得主机的IP,因而系统开销更大,适用于非固定IP的情况,如ADSL。
二、pptp的网络
我们通过pptp来构建一个vpn,用于我们在家里访问单位的内部网络。
可以理解为三个物理网络,家里的无线路由(局域网),互联网,单位的内网。
在单位内网与互联网之间布署pptp主机,在家里通过pptp协议连接到pptp主机后,获得一个新的IP,从而在构建了一个新的局域网。不管有多少人连接到了pptp主机,我们不会知道,也不能访问他们。可以说在这个局域网里只有两台机器,一个是家里的电脑,一个是pptp主机,这也正是点对点的意思。
有了这个新的局域网,pptp主机就是我们的新网关,通过他就可以访问到单位的内网了,当然需要在pptp主机上设置数据包在eth口与ppp口之间forward,以及设置SNAT或是DNAT。
三、pptp主机网络设置
1、设置net.ipv4.ip_forward = 1允许转发
2、允许pptp协议通过
iptables -A INPUT -i eth0 -p tcp --dport 1723 -j ACCEPT
iptables -A INPUT -i eth0 -p gre -j ACCEPT
iptables -A OUTPUT -p tcp --dport 1723 -j ACCEPT
iptables -A OUTPUT -p gre -j ACCEPT
3、设置在ppp与eth之间转发,有多少客户连接在pptp主机上就有多少ppp端口
iptables -A FORWARD -i ppp+ -o eth0 -j ACCEPT
iptables -A FORWARD -i eth0 -o ppp+ -j ACCEPT
4、在访问单位内网时,将源地址,也就是连接到pptp主机后获得的新IP转换为pptp主机的内网ip
iptables -t nat -A POSTROUTING -o eth0 -j SNAT --to-source 172.16.1.1
只需做SNAT就好,数据返回到客户机不需要再做设置,系统会自动完成。
也可做成目标地址转换,即通过访问pptp主机的ppp接口ip,来重定向到内网主机
iptables -t nat -A PREROUTING -s 192.168.0.0/24 -d 192.168.0.1 -j DNAT --to-destination 172.16.1.2
不管是SNAT还是DNAT都应做FORWARD。
iptables:
http://kuangkuang.blog.51cto.com/838/247230/
pptp安装配置:
https://www.painso.com/linux-xen-openvz-pptp-services.html
http://www.51cto.com/art/200812/102721.htm
http://www.android100.org/html/201407/28/47493.html