首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > 软件管理 > PowerDesigner >

筹建openl2tpd服务器

2012-06-28 
搭建openl2tpd服务器搭建openl2tpd,以前也搭建过了,不过没有总结,今天弄了一下,小结一下,记录一下先贴几个

搭建openl2tpd服务器

搭建openl2tpd,以前也搭建过了,不过没有总结,今天弄了一下,小结一下,记录一下


先贴几个官网的方法,其实openl2tpd的官网就说的蛮清楚了,只不过是全英文的,但是不会影响看配置文件就是

?

需要格外注意的是,openl2tpd不支持全数字密码或者以数字开头的密码

?

?


注意无论你是静态分配地址还是动态分配,服务器端都必须做转发规则,执行

写道iptables -A POSTROUTING -t nat -s 10.5.1.0/24 -j MASQUERADE

echo 1 > /proc/sys/net/ipv4/ip_forward

sysctl -w net.ipv4.ip_forward=1

?

?

?

?

OK,这样差不多openl2tpd服务器端搭建就完成了,执行service openl2tpd start或者直接openl2tpd把进程开起来,能正常开起来就没什么问题了


注意如果有做防火墙规则的话,记得把openl2tpd使用的udp 1701端口允许数据通过



?

openl2tpd目前应该只支持unix/linux客户端,

对于客户端环境的搭建,简单说一下

?

源代码安装过程是一模一样的,差的只是配置文件,客户端需要一个配置文件,即/etc/openl2tpd.conf

官网给的配置文件模板是

写道ppp profile modify profile_name=default \
auth_eap=no auth_mschapv1=no auth_mschapv2=no

tunnel create tunnel_name=anyname dest_ipaddr=42.1.1.1 \
persist=yes

session create tunnel_name=anyname \
session_name=anysession \
user_name=test \
user_password=test

?

其中dest_ipaddr=42.1.1.1即是配置openl2tpd服务器的ip地址

最下面两行是用户名密码


其他都不用配置了,直接openl2tpd -Df进行debug调试一下就可以了

1 楼 阿尔发828 2012-02-09   您好。我的平台是arm,我现在已经建立起了vpn的连接,ifconfig下有ppp0的vpn连接。
   我想 用代码实现通过vpn数据的传输。内核驱动里sample code。但是我没有实验成功。有些参数不太懂。代码如下。我困惑的地方如下
         1 udp_fd 参数如何获取,需要直接去建立吗,还是openltpd建立vpn连接已经建立好了呢?
         2.session_fd 如何获得呢。自己去建立吗,socket(AF_PPPOX, SOCK_DGRAM, PX_PROTO_OL2TP)用这句代码建立吗
          3.步骤2中的tunnel_id是步骤1中建立的kernel_fd吗?
            4.步骤1和2中的地址都是pppo连接的远端ip地址吗? 端口为什么呢,是1701还是其他?
        请问您做过相关的vpn数据传输的东西吗?能不能给我必要的帮助或者相关的代码呢?谢谢了。

Sample Userspace Code
=====================

1. Create tunnel management PPPoX socket

        kernel_fd = socket(AF_PPPOX, SOCK_DGRAM, PX_PROTO_OL2TP);
        if (kernel_fd >= 0) {
                struct sockaddr_pppol2tp sax;
                struct sockaddr_in const *peer_addr;

                peer_addr = l2tp_tunnel_get_peer_addr(tunnel);
                memset(&sax, 0, sizeof(sax));
                sax.sa_family = AF_PPPOX;
                sax.sa_protocol = PX_PROTO_OL2TP;
                sax.pppol2tp.fd = udp_fd;       /* fd of tunnel UDP socket */
                sax.pppol2tp.addr.sin_addr.s_addr = peer_addr->sin_addr.s_addr;
                sax.pppol2tp.addr.sin_port = peer_addr->sin_port;
                sax.pppol2tp.addr.sin_family = AF_INET;
                sax.pppol2tp.s_tunnel = tunnel_id;
                sax.pppol2tp.s_session = 0;     /* special case: mgmt socket */
                sax.pppol2tp.d_tunnel = 0;
                sax.pppol2tp.d_session = 0;     /* special case: mgmt socket */

                if(connect(kernel_fd, (struct sockaddr *)&sax, sizeof(sax) ) < 0 ) {
                        perror("connect failed");
                        result = -errno;
                        goto err;
                }
        }

2. Create session PPPoX data socket

        struct sockaddr_pppol2tp sax;
        int fd;

        /* Note, the target socket must be bound already, else it will not be ready */
        sax.sa_family = AF_PPPOX;
        sax.sa_protocol = PX_PROTO_OL2TP;
        sax.pppol2tp.fd = tunnel_fd;
        sax.pppol2tp.addr.sin_addr.s_addr = addr->sin_addr.s_addr;
        sax.pppol2tp.addr.sin_port = addr->sin_port;
        sax.pppol2tp.addr.sin_family = AF_INET;
        sax.pppol2tp.s_tunnel  = tunnel_id;
        sax.pppol2tp.s_session = session_id;
        sax.pppol2tp.d_tunnel  = peer_tunnel_id;
        sax.pppol2tp.d_session = peer_session_id;

        /* session_fd is the fd of the session's PPPoL2TP socket.
         * tunnel_fd is the fd of the tunnel UDP socket.
         */
        fd = connect(session_fd, (struct sockaddr *)&sax, sizeof(sax));
        if (fd < 0 )    {
                return -errno;
        }
        return 0;
2 楼 flw521521 2012-02-09   阿尔发828 写道您好。我的平台是arm,我现在已经建立起了vpn的连接,ifconfig下有ppp0的vpn连接。
   我想 用代码实现通过vpn数据的传输。内核驱动里sample code。但是我没有实验成功。有些参数不太懂。代码如下。我困惑的地方如下
         1 udp_fd 参数如何获取,需要直接去建立吗,还是openltpd建立vpn连接已经建立好了呢?
         2.session_fd 如何获得呢。自己去建立吗,socket(AF_PPPOX, SOCK_DGRAM, PX_PROTO_OL2TP)用这句代码建立吗
          3.步骤2中的tunnel_id是步骤1中建立的kernel_fd吗?
            4.步骤1和2中的地址都是pppo连接的远端ip地址吗? 端口为什么呢,是1701还是其他?
        请问您做过相关的vpn数据传输的东西吗?能不能给我必要的帮助或者相关的代码呢?谢谢了。

Sample Userspace Code
=====================

1. Create tunnel management PPPoX socket

        kernel_fd = socket(AF_PPPOX, SOCK_DGRAM, PX_PROTO_OL2TP);
        if (kernel_fd >= 0) {
                struct sockaddr_pppol2tp sax;
                struct sockaddr_in const *peer_addr;

                peer_addr = l2tp_tunnel_get_peer_addr(tunnel);
                memset(&sax, 0, sizeof(sax));
                sax.sa_family = AF_PPPOX;
                sax.sa_protocol = PX_PROTO_OL2TP;
                sax.pppol2tp.fd = udp_fd;       /* fd of tunnel UDP socket */
                sax.pppol2tp.addr.sin_addr.s_addr = peer_addr->sin_addr.s_addr;
                sax.pppol2tp.addr.sin_port = peer_addr->sin_port;
                sax.pppol2tp.addr.sin_family = AF_INET;
                sax.pppol2tp.s_tunnel = tunnel_id;
                sax.pppol2tp.s_session = 0;     /* special case: mgmt socket */
                sax.pppol2tp.d_tunnel = 0;
                sax.pppol2tp.d_session = 0;     /* special case: mgmt socket */

                if(connect(kernel_fd, (struct sockaddr *)&sax, sizeof(sax) ) < 0 ) {
                        perror("connect failed");
                        result = -errno;
                        goto err;
                }
        }

2. Create session PPPoX data socket

        struct sockaddr_pppol2tp sax;
        int fd;

        /* Note, the target socket must be bound already, else it will not be ready */
        sax.sa_family = AF_PPPOX;
        sax.sa_protocol = PX_PROTO_OL2TP;
        sax.pppol2tp.fd = tunnel_fd;
        sax.pppol2tp.addr.sin_addr.s_addr = addr->sin_addr.s_addr;
        sax.pppol2tp.addr.sin_port = addr->sin_port;
        sax.pppol2tp.addr.sin_family = AF_INET;
        sax.pppol2tp.s_tunnel  = tunnel_id;
        sax.pppol2tp.s_session = session_id;
        sax.pppol2tp.d_tunnel  = peer_tunnel_id;
        sax.pppol2tp.d_session = peer_session_id;

        /* session_fd is the fd of the session's PPPoL2TP socket.
         * tunnel_fd is the fd of the tunnel UDP socket.
         */
        fd = connect(session_fd, (struct sockaddr *)&sax, sizeof(sax));
        if (fd < 0 )    {
                return -errno;
        }
        return 0;


实在很不好意思,我不搞开发,所以不能深入代码级别解决问题,这些我都不懂。。 3 楼 阿尔发828 2012-02-09   奥。谢谢。那我想在问一下,
       1. 对于您来说,您是怎么使用这个建立的ppp0的vpn连接的呢?使用了哪些软件,最终实现的目的是能够通过这个连接来上网吗,还是别的的?
       2.建立vpn的连接以后,是不是必须要iptable做一下转发规则呢。还有别的吗?
       3.我现在想实现在局域网内通过vpn传输数据。我现在输入 route 是出现 以下信息。是不是我应该加一下route规则呢,我建立的pppo的ip是 10.3.1.1和10.3.1.2 ,是不是我应该吧这个地址也转发一下呢。

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     *               255.255.255.0   U     0      0        0 eth0
default         192.168.1.1     0.0.0.0         UG    0      0        0 eth0
    网络通信的原理太薄了。感觉现在挺纠结的。呵呵。谢谢了 4 楼 阿尔发828 2012-02-09   阿尔发828 写道奥。谢谢。那我想在问一下,
       1. 对于您来说,您是怎么使用这个建立的ppp0的vpn连接的呢?使用了哪些软件,最终实现的目的是能够通过这个连接来上网吗,还是别的的?
       2.建立vpn的连接以后,是不是必须要iptable做一下转发规则呢。还有别的吗?
       3.我现在想实现在局域网内通过vpn传输数据。我想在能建立ppp0的vpn连接,也可以ping通对方。我现在输入 route 是出现 以下信息。是不是我应该加一下route规则呢,我建立的pppo的ip是 10.3.1.1和10.3.1.2 ,是不是我应该吧这个地址也转发一下呢。

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     *               255.255.255.0   U     0      0        0 eth0
default         192.168.1.1     0.0.0.0         UG    0      0        0 eth0
    网络通信的原理太薄了。感觉现在挺纠结的。呵呵。谢谢了
5 楼 flw521521 2012-02-09   阿尔发828 写道奥。谢谢。那我想在问一下,
       1. 对于您来说,您是怎么使用这个建立的ppp0的vpn连接的呢?使用了哪些软件,最终实现的目的是能够通过这个连接来上网吗,还是别的的?
       2.建立vpn的连接以后,是不是必须要iptable做一下转发规则呢。还有别的吗?
       3.我现在想实现在局域网内通过vpn传输数据。我现在输入 route 是出现 以下信息。是不是我应该加一下route规则呢,我建立的pppo的ip是 10.3.1.1和10.3.1.2 ,是不是我应该吧这个地址也转发一下呢。

Destination     Gateway         Genmask         Flags Metric Ref    Use Iface
192.168.1.0     *               255.255.255.0   U     0      0        0 eth0
default         192.168.1.1     0.0.0.0         UG    0      0        0 eth0
    网络通信的原理太薄了。感觉现在挺纠结的。呵呵。谢谢了

呵呵
1、公司业务需要,需要对比各种VPN技术的性能差异,所以就找到了openl2tpd。建立VPN的目的你可以google一下,比如数据加密、远程办公之类的。使用的软件没别的,openl2tpd的客户端跟服务器都是相同的代码,只不过配置不同而已。动态分配ip还要用到ippool。当然编译过程中需要的依赖软件是另外一回事
2、建立VPN连接之后,你可以通过手动添加路由来访问你所需的网络,手动添加路由的作用一般都是客户端通过vpn server去访问所需的局域网。添加iptables相当于动态转换,就不用一条条手动的添加了,iptables的主要作用是做nat转换
3、对,你的这个网段如果添加iptables,应该是这样的
iptables -A POSTROUTING -t nat -s 10.3.1.0/24 -j MASQUERADE
顺便打开转发开关:echo 1 > /proc/sys/net/ipv4/ip_forward 6 楼 阿尔发828 2012-03-13   您好。我现在对vpn的概念和模型有些模糊。咨询您几个问题。
      1. openl2tp 分为 lac 和lns。分别叫做 L2TP访问集中器 和L2TP网络服务器。协议上说远端系统(remote system)。 请问您怎么理解这几个的关系的呢。
      2.我现在也成功的搭建了openl2tp的服务器。那么应该怎么使用呢。您是怎么具体使用的呢?
7 楼 阿尔发828 2012-03-13   好。我现在对openl2tp的概念和用法有点模糊。请教您几个问题。
1. openl2tp有 lac(L2TP访问集中器)和 lns(l2tp 网络服务器).还用remote system(远端系统)。您是怎么理解这几个的关系的呢。
2.我现在已经建立的openl2tp的服务器。可以ping通建立的vpn的ip。您是如何具体使用建立的vpn的网络的呢?
谢谢了 8 楼 阿尔发828 2012-03-13   您好。我想在具体问一下,建立起了openl2tp的服务器后。lac和lns都建立成功后。远端系统怎么登陆vpn的服务器呢。您是用的什么软件来连接服务器建立vpn隧道连接的呢。谢谢了 9 楼 flw521521 2012-03-13   阿尔发828 写道您好。我想在具体问一下,建立起了openl2tp的服务器后。lac和lns都建立成功后。远端系统怎么登陆vpn的服务器呢。您是用的什么软件来连接服务器建立vpn隧道连接的呢。谢谢了

我的理解是,lac是相当于openl2tpd的client端,lns是openl2tpd的server端,如果lac连接lns成功的话,他们之间就已经建立了VPN连接,如果你的默认路由是vpn虚拟网关的话,那么数据大部分就会全部都通过vpn隧道进行通信

如果你成功搭建了openl2tpd server端,及lns,你需要另外一台linux电脑同样运行openl2tpd,作为lac端,按照博文里的方法进行vpn连接,连接成功了,lac端就会获取到一个来自lns分配的虚拟ip地址

我不是很清楚你具体想问什么,希望我的回答是你想要的

热点排行