利用公网ipv6搭建IPSec实现异地组网

本文以最差网络环境进行设置, 如果网络条件够好可以降低一部分设备要求, 同时可以减少一些不必要的设置.

前置条件:

2条宽带均支持ipv6, 且至少其中一条宽带可以访问到另一条宽带ipv6的至少2个udp端口

用到的设备:

2台tp-link高版本的er系列路由器(本文以一台er3200g v1.0和一台er6110g v4.0为例)
2台支持ipv6的小主机(本文以刷了armbian系统的机顶盒为例)

设备连接和部分配置图:

image.png

开始配置

配置er6110g (响应方, 至少有2个udp端口能被访问到一方,假如端口为8001和8002)
  1. 创建vlan


    image.png

2.配置nat


image.png

3.配置IPSec


image.png
image.png
image.png
配置er6110g下的Linux小主机

配置端口转发: PortForward u :8001+:8002 192.168.111.1:500+192.168.111.1:4500

PortForward 见前面的文章, 可以创建一个host网络的docker长期运行

配置er3200g下的Linux小主机

配置端口转发: PortForward u :500+:4500 [2408::6110]:8001+[2408::6110]:8002

假设[2408::6110]为er6110g的wan口ip
PortForward 见前面的文章, 可以创建一个host网络的docker长期运行

配置er3200g (发起方)
  1. 创建vlan


    image.png
  2. 配置IPSec


    image.png
image.png
image.png

问题排查

image.png
image.png
image.png

优化

  1. 如果被访问方可以获取到 ipv6子网前缀 就不需要再配置nat66了, 直接给它下面的Linux设备分配一个公网ipv6, 然后让发起方直接连拥有公网ipv6的armbian设备即可. 然后再配合ddns, 直接通过域名访问.

  2. 在通过ipv6进行数据转发时 建议通过u2t + t2u进行转发, 同时配置转发设备
    echo "net.ipv4.tcp_congestion_control = bbr" >> /etc/sysctl.conf && sysctl -p
    (armbian默认为bbr)
    原因有2:
    a. 一台设备一般可以分配多个ipv6, 在转发udp数据时可能存在响应方不采用收到数据的ipv6地址去响应数据(前面文章有说到过)
    b. 在用网高峰期可能会存在单线程tcp传输数据慢的问题(尤其是跨运营商, 这个问题困扰了我很久. 即使是公网ipv6直连也存在这样的问题, 和IPSec无关). 因为大多数设备的 tcp_congestion_control 是CUBIC, 在高延迟 高丢包率网络中速度会非常慢(tcp单线程40兆上行只能跑到5兆左右). 采用tcp传数据后, 用户设备的丢包率就会变为0 , 压力全部给到了ipv6数据转发设备, ipv6数据转发设备又采用的bbr 速率会有非常明显的提升(单线程几乎能跑慢带宽).

©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

友情链接更多精彩内容