- 本文適用於
Ubuntu
和 MacOS
- 範例使用版本為
1.1pre17
,參考 Tinc
安裝必要元件
1
| sudo apt-get install -y build-essential libncurses5-dev libreadline6-dev libzlcore-dev zlib1g-dev liblzo2-dev libssl-dev
|
安裝 Tinc
手動安裝
下載原始碼
1
| wget -qO- https://www.tinc-vpn.org/packages/${tincVersion}.tar.gz | tar zxv
|
編譯
1
| cd tinc-1.1pre17 && ./configure && make
|
安裝
透過 Brew 安裝
1 2
| brew install tinc brew cask install tuntap
|
檢查
設定 Tinc
事前準備
創建預設目錄
1 2
| sudo mkdir -p /usr/local/var/run/ sudo mkdir -p /usr/local/etc/tinc/
|
初始化 Tinc
設定
Tinc
使用 RSA
的方式進行認證,所以要先建立公私鑰。
Tinc
可以建立多個連線,所以要先給定一個能夠辨識的連線名稱,並且給此台電腦一個名字和虛擬 IP 位置。
var |
description |
netName |
能夠辨識連線的名稱 |
hostname |
此台電腦的名稱 |
vpnSubnet |
此台電腦的虛擬 IP |
address |
此台電腦的公開 IP |
1 2 3 4 5 6 7 8 9
| netName=changeme hostname=changeme vpnSubnet=changeme address=changeme
sudo tinc -n ${netName} init ${hostname} sudo tinc -n ${netName} add Subnet ${vpnSubnet}/32 sudo tinc -n ${netName} add Address ${address} sudo chmod +x tinc-*
|
hosts
資料夾中會放有各個伺服器的公開資訊,如:Subnet
、Public Key
、Address
、Port
等。
當建立好基本設定後,可以看到目錄結構如下。
1 2 3 4 5 6 7 8 9
| $ tree /usr/local/etc/tinc/${netName} /usr/local/etc/tinc/${netName} ├── ed25519_key.priv ├── hosts │ └── ${hostname} ├── rsa_key.priv ├── tinc.conf ├── tinc-down └── tinc-up
|
1 2 3 4 5 6 7 8 9 10
| Name = ${hostname} AddressFamily = ipv4
AutoConnect = yes
|
1 2 3
| #!/bin/sh
ifconfig $INTERFACE ${vpnSubnet} netmask 255.255.255.0
|
1 2 3
| #!/bin/sh
ifconfig $INTERFACE down
|
交換 hosts
server
與 client
端必須擁有彼此的資訊,並且放在 hosts
資料夾底下。
善用 rsync
和 scp
設定自動啟動
Linux
建立 tinc.service
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15
| sudo cat <<EOF > /lib/systemd/system/tinc.service [Unit] Description=Tinc VPN After=network.target
[Service] Type=oneshot RemainAfterExit=yes ExecStart=/bin/true ExecReload=/bin/true WorkingDirectory=/usr/local/etc/tinc
[Install] WantedBy=multi-user.target EOF
|
建立 [email protected]
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19
| sudo cat <<EOF > /lib/systemd/system/[email protected] [Unit] Description=Tinc net %i PartOf=tinc.service ReloadPropagatedFrom=tinc.service
[Service] Type=simple WorkingDirectory=/usr/local/etc/tinc/%i ExecStart=/usr/local/sbin/tincd -n %i -D ExecReload=/usr/local/sbin/tincd -n %i -kHUP KillMode=mixed TimeoutStopSec=5 Restart=always RestartSec=60
[Install] WantedBy=multi-user.target EOF
|
啟動服務
1
| sudo systemctl enable --now tinc@${netName}.service
|
Mac
複製貼上懶人包
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55
| tincVersion=tinc-1.1pre17 netName=changeme hostname=changeme vpnSubnet=changeme
sudo apt-get install -y build-essential libncurses5-dev libreadline6-dev libzlcore-dev zlib1g-dev liblzo2-dev libssl-dev
wget -qO- https://www.tinc-vpn.org/packages/${tincVersion}.tar.gz | tar zxv cd ${tincVersion} && ./configure && make && sudo make install
sudo mkdir -p /usr/local/var/run/ sudo mkdir -p /usr/local/etc/tinc/
sudo tinc -n ${netName} init ${hostname} sudo tinc -n ${netName} add Subnet ${vpnSubnet}/32 sudo chmod +x tinc-* sudo sh -c "echo ifconfig $INTERFACE ${vpnSubnet} netmask 255.255.255.0 > /usr/local/etc/tinc/${netName}/tinc-up"
sudo sh -c "cat <<EOF > /lib/systemd/system/tinc.service [Unit] Description=Tinc VPN After=network.target
[Service] Type=oneshot RemainAfterExit=yes ExecStart=/bin/true ExecReload=/bin/true WorkingDirectory=/usr/local/etc/tinc
[Install] WantedBy=multi-user.target EOF"
sudo sh -c "cat <<EOF > /lib/systemd/system/[email protected] [Unit] Description=Tinc net %i PartOf=tinc.service ReloadPropagatedFrom=tinc.service
[Service] Type=simple WorkingDirectory=/usr/local/etc/tinc/%i ExecStart=/usr/local/sbin/tincd -n %i -D ExecReload=/usr/local/sbin/tincd -n %i -kHUP KillMode=mixed TimeoutStopSec=5 Restart=always RestartSec=60
[Install] WantedBy=multi-user.target EOF"
sudo systemctl enable --now tinc@${netName}.service
|
使用 Tinc
Tinc
和 Tinc-pre
的指令略微不同,斟酌使用。
啟動
1
| sudo tinc -n ${netName} start
|
1
| sudo tincd -n ${netName} -D
|
停止
1
| sudo tinc -n ${netName} stop
|
1
| sudo tincd -n ${netName} -k
|
測試
啟動成功後,會看到相對應的interface
1 2 3 4 5 6 7 8 9
| $ ifconfig ${netName} ${netName}: flags=4305<UP,POINTOPOINT,RUNNING,NOARP,MULTICAST> mtu 1500 inet 10.36.205.13 netmask 255.255.255.0 destination 10.36.205.13 inet6 fe80::5cf0:a5b4:3e5c:2e67 prefixlen 64 scopeid 0x20<link> unspec 00-00-00-00-00-00-00-00-00-00-00-00-00-00-00-00 txqueuelen 500 (UNSPEC) RX packets 243089132 bytes 66121117371 (66.1 GB) RX errors 0 dropped 0 overruns 0 frame 0 TX packets 249144121 bytes 75720457202 (75.7 GB) TX errors 0 dropped 2067 overruns 0 carrier 0 collisions 0
|