一、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來構建一個v*n,用於我們在家裏訪問單位的內部網絡。
可以理解爲三個物理網絡,家裏的無線路由(局域網),互聯網,單位的內網。
在單位內網與互聯網之間佈署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