用l2tp(不带ipsec)的方式实现云服务器到机器人的主动访问

最后更新于2023年3月24日 09:36:40

v*n不等于翻墙!

v*n不等于翻墙!

v*n不等于翻墙!

项目背景和概念定义

机器人使用5g模块(跟个路由器似的,能插一张5g电话卡,可以理解为手机开移动数据)上网;
5g卡是定向卡,定死了只能访问某个外网ip,这里设定是只能访问我们的云服务器;

阿里云服务器,下面简称CLD,因为这里跟v*n服务器很容易混淆;

v*n服务器,是一个托管在docker上的,负责提供ipsec-PSK,用户名,密码来让客户端连接到它;这里的客户端就是小车、红绿灯啥的。

要解决的问题

类似于我能上百度,但是百度上不了我:我就想让CLD主动访问小车,但是由于上面提到的限制,CLD是找不到小车的ip的。

大体思路

在CLD上使用hwdsl2/ipsec-vpn-server,创建基于docker容器的v*n服务器,再将机器人和云服务器设成客户端;

第一步:确定做v*n服务器的开源库

选择hwdsl2/ipsec-vpn-server做v*n服务器。

第二步:加深协议了解

经过多方拉扯,学到了一点姿势:
L当我们提到L2TP的时候,一定要分清,是L2TPv2,还是L2TP over ipsec,还是L2TPv3。
1、v3在商用上很少,暂不做考虑;
2、L2TPv2在很多语境下(尤其是跟深谙此道的5g模块供应商交流的情况下)也被简称为L2TP,是最普通的vn协议,如果发现连接这个L2TP的vn时,没地方填写ipsec pre-shared key,那八成是这种;
3、ipsec和L2TP一样,都是vn协议,L2TP over ipsec相当于在L2TP的基础上多包装了一层ipsec,相当于两层vn,对信息进行了加密,此时就需要用到ipsec pre-shared key(PSK)进行额外验证。

第三步:修改v*n服务器源码 & 编译docker镜像

机器人使用的5g模块仅支持L2TP协议(不使用ipsec的这种),但是hwdsl2/ipsec-vpn-server这个库考虑到安全性,是默认不支持L2TP-without-ipsec的,因此我们要对源码做些修改,请完全参考该github-issue,从源码开始编译docker镜像:l2tp without IPSec
总结一下是:

# 在docker-ipsec-vpn-server/run.sh里面,删除这两句
$ipi 1 -p udp --dport 1701 -m policy --dir in --pol none -j DROP 
$ipi 6 -p udp --dport 1701 -j DROP 
# 在docker-ipsec-vpn-server/Dockerfile.debian里面,暴露1701端口
EXPOSE 500/udp 4500/udp 1701/udp

里面有个小坑是:在docker build一个debian-based的镜像时,应该修改源码中的Dockerfile.debian这个文件,而不是Dockerfile
编译语句是:

docker build -f Dockerfile.debian -t ${image-tag-name}:${image-tag-version} .

第四步:根据docker镜像创建容器

这是我编译好的镜像:
在这里插入图片描述
不使用ipsec的情况下,是不支持--network=host这种网络模式的,不然我就不用把CLD设置成客户端了。

创建vpn.env文件,在里面设置PSK,用户名,密码,路径问题可以参考github上的内容:

VPN_IPSEC_PSK=${32位以下随便填一个字符串}
VPN_USER=${yonghuming}
VPN_PASSWORD=${mima}

运行容器的命令是:sudo docker run -d --privileged -p 1701:1701/udp -p 500:500/udp -p 4500:4500/udp --name vpn-container --restart=always --env-file ./vpn.env -v /lib/modules:/lib/modules:ro l2tp-no-ipsec
注意要把500, 1701, 4500端口全部打开,不要被防火墙拦截了。

完成后,用sudo docker logs vpn-container可以看到PSK,用户名,密码,拿这三个就可以在客户端登录力!不建议windows和linux登录,因为还要做额外配置;手机登录时建议使用高贵的华为或者荣耀,因为小米跟红米不支持L2TP,蒸虾头。

第五步:额外步骤,将CLD配置为客户端

这一步是因为,在默认的bridge模式下,从CLD无法直接ping到小车:
vn服务器的网络如图:
在这里插入图片描述
~~这里的ppp1 interface就是一个点到点的v
n,可以把192.168.42.11看作是机器人的ip,而因为netmask是32,所以再怎么设置路由,从CLD也是没办法ping通机器人的。~~

将CLD设置为客户端,请参考:https://github.com/hwdsl2/setup-ipsec-vpn/blob/master/docs/clients-zh.md
添加路由规则:route add -net 192.168.42.0 netmask 255.255.255.0 gw 192.168.42.1

最新更新:上述方法广义上可行,但是狭义上,不适合我们使用的5g模块,因此直接把机器人配成v*n客户端

DONE

以下内容均已废弃,用这个路由转发的方式转了半天搞不出来

阿里云主机通过Docker安装L2TP
按照这个来,但是创建容器的地方改一下。

在做l2tp 服务器映射,用桥接的方式把容器内部的客户端ip映射出来

sudo docker run --name l2tp-vpn-server --env-file ./vpn.env --net=host --restart=always -p 500:500/udp -p 4500:4500/udp -d --privileged hwdsl2/ipsec-vpn-server

创建容器的时候用这个来建。
如果需要不通过ipsec的l2tp,可以参考这个issue:https://github.com/hwdsl2/docker-ipsec-vpn-server/issues/191

  • 0
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值