Linux单网卡架设VPN并NAT共享上网
服务器使用shorewall作为防火墙,实际上shorewall只是作为iptables的一个配置程序而已,实际上防火墙还是iptables;
首先是建立VPN,使用软件包PPTPD,这样做的好处是方便认证,也支持windows,安全性不如openvpn,但是简单实用;
服务器环境:
OS:ubuntu server 8.10
firewall: shorewall
IP:192.168.2.100
安装:
sudo apt-get install pptpd
修改配置文件:/etc/pptpd.conf
修改localip remoteip
localip 192.168.250.1
remoteip 192.168.250.234-238,192.168.250.245
这里随便找了个IP段localip相当于拨号后的服务器地址,可以写成本机IP,或者和remoteip的IP段相同的一个IP地址
remoteip是客户机分配的IP段,这里分配了12个IP地址,也就只允许12个机器同时通过VPN连接,再增加就不能分配到IP地址了
修改配置文件:/etc/ppp/chap-secrets
这个文件里面设置登陆用的账号密码等信息
设置格式是:
# client server secret IP addresses
abc * 123456
第一个是用户名 然后是服务器地址 然后是登陆所用的密码 最后是为客户拨号后分配的IP地址,不指定的话就是系统自动分配
以上过程之后,咱的PPTPD就配置好了哈
由于服务器采用了shorewall防火墙,需要开放端口1723,47和gre协议
编辑/etc/shorewall/rules
增加:
ACCEPT net $FW gre
ACCEPT net $FW tcp 1723
ACCEPT net $FW tcp 47
然后重启下shorewall:
sudo shorewall restart
开始测试在windows上VPN拨号吧
windows下VPN连接建立方法就不多说了哈
OK,测试VPN可以拨通了,但是还不能通过服务器的网络连接互联网,可能你会发现,除了访问服务器,其他你什么都干不了
下面来做NAT,不过这个地方我也没做得很好,还有点缺陷,希望以后能解决这个问题
拨通VPN后,在服务器上使用ifconfig可以看到多了一个PPP*的网络连接,例如我这里是ppp0
做NAT我也使用shorewall来做
修改/etc/shorewall/interface
增加:
ppp0 ipv4
修改/etc/shorewall/zones
增加:
ppp ppp0
修改/etc/shorewall/masq
增加:
eth0 ppp0
OK,然后重启shorewall
sudo shorewall restart
NAT配置好了
这里要注意的是ppp0一定要存在,否则shorewall要报错,这个就是shorewall不足的地方了,不够灵活。
如果你不用shorewall 防火墙,直接使用iptables指令进行dnat操作,就不会因为没有ppp0连接而报错了。