第一篇文章,也可能是最后一篇文章,懶人一個,隨便寫寫
開局一張圖,內容全靠編系列
tinc篇
官網: https://www.tinc-vpn.org
網段划分
openwrt 10.10.0.1/32 路由器 (路由器lan段192.168.10.x)
aliyun 10.10.0.2/32 106.15.3x.xxxx 公網機器,p2p打洞實現不了的時候可以轉發,理論上轉發應該也可以無視運營商的qos
pc1 10.10.0.3/32 windows系統
手機 10.10.0.4/32 安卓系統,tinc是有安卓客戶端的
環境:centos8 aliyun公網機器
版本:tinc-1.0.36-2.el8.x86_64
#1 開啟內核轉發
vim /etc/sysctl.conf #centos6
cd /etc/sysctl.d #centos7
vim /etc/sysctl.d/99-sysctl.conf #centos8
net.ipv4.ip_forward = 1
sysctl -p
# 更新yum源
mv /etc/yum.repos.d/CentOS-Base.repo /etc/yum.repos.d/CentOS-Base.repo_bak
wget -O /etc/yum.repos.d/CentOS-Base.repo http://mirrors.aliyun.com/repo/Centos-7.repo
yum makecache
# 列出yum源
yum list tinc
# 安裝
yum install tinc -y
locate tinc
# 新建tinc相關文件夾
mkdir -p /etc/tinc/cloud/hosts
## 配置Master節點 公網機器centos##
# tinc.conf centos
vim /etc/tinc/cloud/tinc.conf
Name = aliyun
Interface = tincvpn
Mode = switch #設置使用Swtich模式 默認為router
AddressFamily = ipv4 #Internet走IPv4協議
BindToAddress = * 11001 #監聽端口
Device = /dev/net/tun
Cipher = aes-128-cbc #對稱加密算法
# ConnectTo = aliyun2 #連接另一公網Master節點保持雙活
# 配置啟動關閉腳本
# tinc-up centos
vim /etc/tinc/cloud/tinc-up
#!/bin/sh
ip link set $INTERFACE up
ip addr add 10.10.0.2/24 dev $INTERFACE
# tinc-down centos
vim /etc/tinc/cloud/tinc-down
#!/bin/sh
ip addr del 10.10.0.2/24 dev $INTERFACE
ip link set $INTERFACE down
# host centos
vim /etc/tinc/cloud/hosts/aliyun
Address = 47.103.xxx.xxx #公網地址
Subnet = 10.10.0.2/32 #tincnetIP信息
Port = 11001 #公網監聽端口
## 腳本授權
chmod 755 /etc/tinc/cloud/tinc-*
## 配置slave節點 內網機器centos##
## openwrt salve
# tinc.conf openwrt
vim /etc/tinc/cloud/tinc.conf
Name = homeroute
Interface = tincvpn
Mode = switch
Device = /dev/net/tun
Cipher = aes-128-cbc
TCPOnly = no
Compression = 0
ConnectTo = aliyun
## 配置slave節點 windows salve ##
# tinc-conf windows
Name = pc1
Interface = tincvpn
Mode = switch
ConnectTo = aliyun
## 生成密鑰 各平台相同
tincd -n cloud -K
# systemctl啟用 centos
systemctl enable tinc@cloud
systemctl start tinc@cloud
systemctl status tinc
# 啟動命令
tincd -n cloud centos、windows、openwrt同理
# 帶日志啟動
tincd -n cloud -D -d3
## openwrt額外配置
opkg update
opkg install tinc
# 修改/etc/config/tinc
vim /etc/config/tinc
config tinc-net cloud
option enabled 1
option Name homeroute
config tinc-host homeroute
option enabled 1
option net cloud
# 啟動命令
/etc/init.d/tinc start
# zerotier配置防火牆規則
iptables -I FORWARD -i ztrta6zetb -j ACCEPT
iptables -I FORWARD -o ztrta6zetb -j ACCEPT
iptables -t nat -I POSTROUTING -o ztrta6zetb -j MASQUERADE
## windows配置開機啟動
C:\ProgramData\Microsoft\Windows\Start Menu\Programs\Startup 下新建啟動的快捷方式、快捷方式添加啟動參數
如果有卡巴斯基等防火牆軟件,需要配置防火牆規則
## 配置路由表
如果我想通過一台機器訪問一個路由器下面的所有機器,那么只要這台機器和這個路由器在同一個tinc網絡下,然后添加路由表就可以了,zeroter可以推送路由表所以不需要。
如果有兩台路由器,希望兩個路由器下面的機器互相訪問,那就兩邊都需要設置路由表。
windows下添加路由表
route print
route add -p 192.168.10.0 mask 255.255.255.0 10.10.0.1 metric 401 if 7
route delete 192.168.10.0
linux下添加路由表
查看網卡索引 arp -a 10.10.0.11
route add -net 192.168.10.0 netmask 255.255.255.0 gw 10.10.0.1 (服務器添加路由表)
openwrt下添加路由表
ip route add 192.168.10.0/24 via 10.10.0.1
## 關於配置文件
理論上只要作為轉發的機器需要配置所有內網下的機器密鑰,其他的服務器只需要配置轉發機器和自己的配置文件就好了,配置很麻煩,沒有zerotier好用,但是實測p2p打動成功后,tinc轉發的確是要比zerotier快一點的,具體原因不知道,也許和我的運營商網絡有關,tinc對比zerotier的缺點是需要有一個公網服務器,優點就是你可能會覺得zerotier不安全吧,而且打洞不成功tinc轉發也是很好用的,能不能打洞成功據說和nat級別有關,網上有工具可以測試。
## 關於內網端口轉發
打洞成功后,你可以把內網機器的應用端口映射到公網上,修改iptables就可以了。如果有域名的話,可以在公網機器上安裝一個nginx,直接反向代理到內網機器的端口也是可以的。
這樣做的好處只需要一台配置很低的公網服務器,用來做轉發,然后再配置一台洋垃圾實體服務器,就可以同時兼顧公網ip和性能。如果公網機器性能好一點,可以作為k8s的master節點,整個域名搭配那個nginx ingress也是很好用的。
# iptables相關操作
# 安裝iptables
service iptables status
iptables --version
iptables --help
iptables -L
iptables -L -n
# 保存規則
service iptables save
service iptables restart
vim /etc/sysconfig/iptables
# 例如mysql的端口轉發
iptables -t nat -A POSTROUTING -j MASQUERADE
iptables -t nat -A PREROUTING -p tcp -m tcp --dport 3306 -j DNAT --to-destination 192.168.10.111:3306