参考资料:http://www.runoob.com/docker/docker-tutorial.html

https://www.gitbook.com/book/yeasy/docker_practice/details

http://pptpclient.sourceforge.net/

http://blog.csdn.net/halcyonbaby/article/details/43499409

http://jamyy.us.to/blog/2012/12/4278.html

需求:在docker(ubuntu16.04)里面,使用pptp ***连接远程的pptp服务器,测试联网成功.

主机环境:

root@xxx:/home/xxx# uname -a
Linux xxx 3.19.0-66-generic #74~14.04.1-Ubuntu SMP Tue Jul 19 19:56:11 UTC 2016 x86_64 x86_64 x86_64 GNU/Linux

准备工作

  1. 主机下载安装docker,并pull ubuntu最新版本(略)

  2. 主机加载模块,不然在docker里面无法连接***.这个坑我花了半天时间解决.

root@xxx:/home/xxx# echo nf_conntrack_pptp | sudo tee /etc/modules-load.d/pptp.conf
root@xxx:/home/xxx# cat /etc/modules-load.d/pptp.conf
nf_conntrack_pptp

3.使用真实的root用户登录docker,不然你会发现,很多无法解决的问题.这个坑我也花了半天时间.

root@xxx:/home/xxx# docker p_w_picpaths
REPOSITORY          TAG                 IMAGE ID            CREATED             SIZE
ubuntu              latest              bd3d4369aebc        2 weeks ago         126.6 MB

4.进入docker,更新系统,下载基础的网络命令以及pptp客户端pptp-linux

root@xxx:/home/xxx# docker run -i -t --privileged=true ubuntu:latest /bin/bash
root@05fd3b705048:/# apt-get -y update
root@05fd3b705048:/# apt-get -y install vim net-tools pptp-linux

5.编辑pptp登录信息,两个文件,第一个文件是帐号密码:

root@05fd3b705048:/# cat /etc/ppp/chap-secrets 
# Secrets for authentication using CHAP
# client	server	secret			IP addresses
hxwx PPTP  159 *

第二个文件是pptp连接的别名

root@05fd3b705048:/# cat /etc/ppp/peers/xiamen 
pty "pptp x.x.x.x --nolaunchpppd" #(此处为pptp服务器的ip地址)
name hxwx   #hxwx为/etc/ppp/chap-secrets对应的登录用户名
remotename PPTP 
ipparam xiamen
require-mppe-128
file /etc/ppp/options.pptp

6.到此,pptp客户端的信息编辑完毕.

使用debug的模式测试登录.

root@05fd3b705048:/etc/ppp/peers# pon xiamen debug dump logfd 2 nodetach
...............
local  IP address 192.168.99.11
remote IP address 192.168.99.1
Script /etc/ppp/ip-up started (pid 146)
Script /etc/ppp/ip-up finished (pid 146), status = 0x0

如果显示以上内容,测试成功连接上***,并获取远程服务器端ip地址.192.168.99.11

正常的连接已经测试:

root@05fd3b705048:/etc/ppp/peers# pon xiamen
root@05fd3b705048:/etc/ppp/peers# ifconfig 
eth0      Link encap:Ethernet  HWaddr 02:42:ac:11:00:02  
          inet addr:172.17.0.2  Bcast:0.0.0.0  Mask:255.255.0.0
          inet6 addr: fe80::42:acff:fe11:2/64 Scope:Link
          UP BROADCAST RUNNING MULTICAST  MTU:1500  Metric:1
          RX packets:749 errors:0 dropped:0 overruns:0 frame:0
          TX packets:454 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:1041172 (1.0 MB)  TX bytes:31660 (31.6 KB)

lo        Link encap:Local Loopback  
          inet addr:127.0.0.1  Mask:255.0.0.0
          inet6 addr: ::1/128 Scope:Host
          UP LOOPBACK RUNNING  MTU:65536  Metric:1
          RX packets:0 errors:0 dropped:0 overruns:0 frame:0
          TX packets:0 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:0 
          RX bytes:0 (0.0 B)  TX bytes:0 (0.0 B)

ppp0      Link encap:Point-to-Point Protocol  
          inet addr:192.168.99.11  P-t-P:192.168.9.1  Mask:255.255.255.255
          UP POINTOPOINT RUNNING NOARP MULTICAST  MTU:1496  Metric:1
          RX packets:6 errors:0 dropped:0 overruns:0 frame:0
          TX packets:6 errors:0 dropped:0 overruns:0 carrier:0
          collisions:0 txqueuelen:3 
          RX bytes:60 (60.0 B)  TX bytes:66 (66.0 B)

7.到此,成功连接***,至于路由的设置,就不列出来了.退出docker,使用docker ps  -a

查找刚刚修改过的docker id,我的docker id为:694d61154c1f,使用conmit命令保存修改至新的镜像.

root@xxx:/home/xxx# docker ps -a
CONTAINER ID        IMAGE                         COMMAND             CREATED             STATUS                         PORTS
root@xxx:/home/xxx# docker commit -m="pptp" -a="xxx" 694d61154c1f ubuntu16.04:pptp


列出镜像:

root@xxx:/home/xxx# docker p_w_picpaths
REPOSITORY                    TAG                 IMAGE ID            CREATED             SIZE
ubuntu16.04                   pptp                38e146672457        2 days ago          238.2 MB

总结:

思路:

使用ubuntu docker-------设置pptp-client客户端--------测试pptp连接***成功.

难点:

  1. docker要使用真实的root用户,命令:--privileged

  2. 宿机要打开nf_conntrack_pptp模块,网上查找资料获知,这是内核3.18以上的Bug