美文网首页
基于 Tinc 流量转发实践

基于 Tinc 流量转发实践

作者: Xiao_Yang | 来源:发表于2022-06-29 09:31 被阅读0次

我相信在实际工作或业务需求中会遇到第三方服务调用需求,比如googleapis、github服务需求或其它第三方服务API对接场景。这里基于开源的轻量级 VPN 工具 tinc 建立点到点之间的隧道技术及路由,实现流量转发。 因考虑到网上关于 Tinc 这方面的文档比较少,前期也有部署过代理方式来实现,在此实践过程碰到不少的问题与配置尝试,记录本文作为个人关于 Tinc 工具的路由模式的基础配置案例指南,以备未来的学习与参考之用。

注:本实践涉及了路由、iptables SNAT、vpn 技术基础知识的应用,具备相关知识背景将有助于背后原理的理解。

实践架构示意图
image-20220628180203013.png

注:服务器端需要有绑定外网IP(云服务如eip)并开放655端口用于tinc客户端t连接

Tinc 安装
# Ubuntu
apt install -y tinc
#Centos
yum install -y tinc

# 创建配置目录
mkdir -p /etc/tinc/<目录名>/hosts   #如 switchcenter / client01
cd /etc/tinc/<目录名>/


# 证书创建 (注:在配置文件都配置好后再执行证书创建命令)
tincd -n <目录名> -K   #如 switchcenter / client01

服务器端配置
# tinc.conf
Name = switchcenter
Interface = tun0
Forwarding = kernel

# tinc-up
#!/bin/bash
ifconfig $INTERFACE 10.100.100.1 netmask 255.255.255.0

# tinc-down
#!/bin/bash
ifconfig $INTERFACE down

# hosts/switchcenter 
Address = x.x.x.x                #Internet_ip
Subnet = 0.0.0.0/0               #必须指定为0/0

-----BEGIN RSA PUBLIC KEY-----
... .... # COPY 已创建的服务器证书
-----END RSA PUBLIC KEY-----

# tincd -n switchcenter -K 

# hosts/client01
[switchcenter]# cat  
Subnet = 10.100.100.2/32

-----BEGIN RSA PUBLIC KEY-----
... ... # COPY 已创建的客户端证书
-----END RSA PUBLIC KEY-----
配置文件列表
#/etc/tinc/switchcenter/
[switchcenter]# ls
hosts  nets.boot  rsa_key.priv  rsa_key.pub  tinc.conf  tincd.log  tinc-down  tinc-up

[client01]# ls hosts
switchcenter  client01
服务器端 Tinc 服务启动
nohup tincd -n switchcenter -D >> tincd.log 2>&1 &
客户端配置
# tinc.conf
Name = client01
Interface = tun0
ConnectTo = switchcenter
Forwarding = kernel

# tinc-up
#!/bin/bash
ifconfig $INTERFACE 10.100.100.2 netmask 255.255.255.0
ip route add 142.250.0.0/16 dev $INTERFACE           # 按需添加访问目标路由,如googleapis.com
ip route add 142.251.0.0/16 dev $INTERFACE
ip route add 172.217.0.0/16 dev $INTERFACE                  


#------------------------下面各文件内容与服务器端一致---------------------------------
# tinc-down
#!/bin/bash
ifconfig $INTERFACE down

#hosts/switchcenter 
Address = x.x.x.x                #Internet_ip
Subnet = 0.0.0.0/0               #必须指定为0/0

-----BEGIN RSA PUBLIC KEY-----
... ....
-----END RSA PUBLIC KEY-----

# tincd -n client01 -K 

#hosts/client01
[switchcenter]# cat  
Subnet = 10.100.100.2/32

-----BEGIN RSA PUBLIC KEY-----
... ...
-----END RSA PUBLIC KEY-----
配置文件列表
#/etc/tinc/client01/
[client01]# ls
hosts  nets.boot  rsa_key.priv  rsa_key.pub  tinc.conf  tincd.log  tinc-down  tinc-up

[client01]# ls hosts
switchcenter  client01
客户端 Tinc 服务启动
nohup tincd -n client01 -D >> tincd.log 2>&1 &

Server端添加 SNAT 和 开启内核流量转发

iptables 增加 SNAT 策略

# eth0为外网通信接口
iptables -t nat -A POSTROUTING -o eth0 -s 10.100.100.0/24 -j MASQUERADE

开启系统内核流量转发

echo 1 > /proc/sys/net/ipv4/ip_forward
验证
[client01]# ping www.googleapis.com
PING www.googleapis.com (172.217.160.106) 56(84) bytes of data.
64 bytes from tsa03s06-in-f10.1e100.net (172.217.160.106): icmp_seq=1 ttl=58 time=31.8 ms
64 bytes from tsa03s06-in-f10.1e100.net (172.217.160.106): icmp_seq=2 ttl=58 time=31.8 ms
64 bytes from tsa03s06-in-f10.1e100.net (172.217.160.106): icmp_seq=3 ttl=58 time=32.6 ms
^C
--- www.googleapis.com ping statistics ---
3 packets transmitted, 3 received, 0% packet loss, time 2002ms
rtt min/avg/max/mdev = 31.846/32.126/32.673/0.438 ms


[switchcenter]# tcpdump -i tun0 -n
tcpdump: verbose output suppressed, use -v or -vv for full protocol decode
listening on tun0, link-type RAW (Raw IP), capture size 262144 bytes

17:42:40.882253 IP 10.100.100.2 > 172.217.160.106: ICMP echo request, id 28554, seq 1, length 64
17:42:40.898855 IP 172.217.160.106 > 10.100.100.2: ICMP echo reply, id 28554, seq 1, length 64
17:42:41.882887 IP 10.100.100.2 > 172.217.160.106: ICMP echo request, id 28554, seq 2, length 64
17:42:41.899462 IP 172.217.160.106 > 10.100.100.2: ICMP echo reply, id 28554, seq 2, length 64
17:42:42.884483 IP 10.100.100.2 > 172.217.160.106: ICMP echo request, id 28554, seq 3, length 64
17:42:42.901043 IP 172.217.160.106 > 10.100.100.2: ICMP echo reply, id 28554, seq 3, length 64
总结

通过 Tinc vpn 工具将点到点 Tunnel 建立后,client 端通过路由方式将“感兴趣”的流量发往 tunnel 另一端server,Server 端通过 SNAT 源地址转换方式访问目标网络(外网)。当然基于需求可以再深入定制 Client 端的路由策略与条目,比如将内部网络建立明细路由,将0/0默认路由全转发至Server。

相关文章

  • 基于 Tinc 流量转发实践

    我相信在实际工作或业务需求中会遇到第三方服务调用需求,比如googleapis、github服务需求或其它第三方服...

  • Linux 下基于路由 IPsec 的花式实践

    动机 IPsec 转发流量有两种方式,一种是基于策略,另外一种是基于路由。本文将尝试阐述基于路由的 IPsec 核...

  • spring-cloud-gateway及其应用

    网关功能 流量转发 用户认证 服务限流 服务降级 灰度发布 1 概述 基于springboot和spring we...

  • 实现内网穿透的十几种方法

    使用QuickConnect,蒲公英,ngrok,FRP,公网IP盒子,Tinc,zerotier-one,万由,...

  • QDaily基于WebP的流量优化实践

    流量优化对于一个app来讲意义非常重大,能节约用户的流量,节约用户的存储空间,而且能有提高网络请求的回包速度,提高...

  • iOS组件化实践(基于CocoaPods)

    iOS组件化实践(基于CocoaPods) iOS组件化实践(基于CocoaPods)

  • CCNA-19、交换机工作原理

    转发方式 目前只用这种 MAC地址表 基于mac地址来交换机基于源mac来学习交换机基于目的mac来转发数据帧 过...

  • istio概括

    总览istio安装和基础概念 流量控制# 使用Pilot和Envoy来进行流量的转发、故障恢复、故障注入、外部流量...

  • 分段路由(segment routing,SR)

    一、介绍 定义:SR是一种新型的MPLS技术,其中控制平面基于IGP路由协议扩展实现,转发层面基于MPLS转发网络...

  • 我的2016年度盘点

    2016年度盘点 一、实践 Oracle数据库迁移割接实践 基于LVS的AAA负载均衡架构实践 基于Ganglia...

网友评论

      本文标题:基于 Tinc 流量转发实践

      本文链接:https://www.haomeiwen.com/subject/gxjtbrtx.html