搭建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地址
我不是很清楚你具体想问什么,希望我的回答是你想要的