Last active
August 14, 2022 19:06
-
-
Save miminashi/f83a967f8c1a74dcb927aeb90947d766 to your computer and use it in GitHub Desktop.
フルメッシュ対応版の闇ネットtincセットアップスクリプト
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#!/bin/sh | |
# | |
# 使い方: | |
# $ url="https://gist.githubusercontent.com/miminashi/f83a967f8c1a74dcb927aeb90947d766/raw"; (curl -L "${url}" || wget -O - "${url}") > /tmp/setup_tinc.sh; sudo sh /tmp/setup_tinc.sh <ノード名> <IPアドレス> | |
# $ url="https://bit.ly/3P7PumJ";(curl -L "${url}" || wget -O - "${url}") > /tmp/s; sudo sh /tmp/s <ノード名> <IPアドレス> | |
# | |
if test -d /etc/tinc/gsnet; then | |
printf 'エラー: /etc/tinc/gsnet は既に存在します\n' | |
printf 'セットアップを中止します\n' | |
exit 1 | |
fi | |
if echo "${1}" | grep -v '^[0-9a-z_][0-9a-z_]*$'; then | |
printf 'エラー: ノード名に使える文字は [a-z0-9_] のみです\n' | |
printf 'セットアップを中止します\n' | |
exit 1 | |
fi | |
node_name="${1}" | |
ip_address="${2}" | |
printf 'NODE_NAME: %s\n' "${node_name}" | |
printf 'IP_ADDRESS: %s\n' "${ip_address}" | |
# tincのインストール | |
apt-get update | |
apt-get install -y tinc iptables | |
# 設定用ディレクトリの作成 | |
mkdir /etc/tinc/gsnet | |
mkdir /etc/tinc/gsnet/hosts | |
# 自ノードのノード定義の作成 | |
# いまのところ特に設定する内容は無い | |
sed 's/{NODE_NAME}/'"${node_name}"'/' > /etc/tinc/gsnet/hosts/"${node_name}" <<'EOF' | |
# {NODE_NAME} | |
EOF | |
# 接続先tincノードのノード定義ファイルの作成 | |
## gsngw01 (miminashi拠点) | |
cat > /etc/tinc/gsnet/hosts/gsngw01 <<'EOF' | |
# gsngw01 | |
Address = 153.127.23.44 | |
Port = 655 | |
-----BEGIN RSA PUBLIC KEY----- | |
MIIBCgKCAQEAs//3ZYJ7+cWRptqA/I6gzpvLL8DEG20pJYSMx6xcPunfazBnKb3w | |
ctz5xwJqTMpYzUQwTs0aIVqF/Rf3+yAIs/UPA1ToX3q3Lq588wIeIJ9R2jr9LOpU | |
o7dgDrE3GDdhOutgbGHqxWzsXlYVfQ1OLQtZFkyAJU5teK++cWmqpL15liZ+JxrI | |
Gkh+NnUVR1DJMh1eEWg/sZMYzIFKZ71BBduhDPo1vYzL83iqwB8LoKDNehd/zzSK | |
mBcxFLb8Bf2ob6c13cyISeFhuWVQMvV0HLDdddHUgBZqhPj9qmUSlnQ+EUHeiVRf | |
2DkrYX2zMIQ+FP0WCT9BdjVA/ZKnX72dtwIDAQAB | |
-----END RSA PUBLIC KEY----- | |
EOF | |
## suzukautako (島村拠点) | |
cat > /etc/tinc/gsnet/hosts/suzukautako <<'EOF' | |
# suzukautako | |
Address = 140.227.70.225 | |
Port = 655 | |
-----BEGIN RSA PUBLIC KEY----- | |
MIIBCgKCAQEAzzPh12lCjoWmnkyOFxQ4+ySQQ4WcYh11AdOoyGLTZCX3yA+jH6NO | |
2EJ6hx4kdvSEQfU1YRR5FJkD28nNsKYAoMhEsbRIJjn/uTCTw0NHFw6MbfDPgTlK | |
vqNhijTY3h3Z5mtciMm5Ooow4ZXywih3Ty2c8Gvc77jMMlWtZ+ay6XsSvFT26Cit | |
oFzKf2uGUT6JoibzTjZcXwfq/aMB4HDG5p5gpA80uYxrwbDnH5TTw6ZbKN2A0IZh | |
xgr5thmIcn+ihGgbJThZhQJ+UfRSlEYOx1TH5oRhUgcWvnNCuDpD7N2MAtZFSGPA | |
ouErT6lQ9C5K0qVk6n7Ou8UkvcZHO4qBaQIDAQAB | |
-----END RSA PUBLIC KEY----- | |
EOF | |
## linuweb (いるか拠点) | |
cat > /etc/tinc/gsnet/hosts/linuweb <<'EOF' | |
# linuweb | |
Address = dolphin-net.mydns.jp | |
Port = 655 | |
-----BEGIN RSA PUBLIC KEY----- | |
MIIBCgKCAQEA2U/CoLlNVBbbVmZthMJY874szpLNkxVzfKt0N5xaIyqd2x1fapev | |
OQjtodz1OnriyeL8hfVaHgqzDjpkWsCbdWrE1xqPZO5h66utspug6qbII4ntXXbq | |
KWUpM+6fZu0qtmp7hSCU//wJIqBGDC5AcQqmUdpY3Kv4knxQ5/F0g4XUyMrn58YM | |
4m+04UZ9OOQGgpyX4e2vS3VDN76Y/dbR+a8nzbhIcmPVzQhkqPcrC24fwYukvsjx | |
VGzpoWRx9iYbayS2D6hv5auhL1JBI4Zx+uNBuhIz4dAMMSyIksW9PthQsMPZbW+x | |
2Ga4SZlJDgLCLOpt8FPdccTWbo27dwpVGwIDAQAB | |
-----END RSA PUBLIC KEY----- | |
EOF | |
## kimon (にむC拠点) | |
cat > /etc/tinc/gsnet/hosts/kimon <<'EOF' | |
# kimon | |
Address = kujira.club | |
Port = 655 | |
-----BEGIN RSA PUBLIC KEY----- | |
MIIBCgKCAQEA2ke3eRn5GzPwutPQVdU2gfCXCTCX6tDMlDG88eaTk+Thj+BU9UJO | |
rKuTgQ6t8UsjP8youZ+S7LQdACoEl9S5BXtbehUjBkIlwdoXcNvhH+L7+81j289f | |
fh6O3nMrocYwYVlarHOYbY6WcBKS4so2oRI+kWSn1+U41H0b3M6RT5FBNQszDg63 | |
UI6GizCXCh9T1tTQOyMHQhQWLH3GX87F3SjH+0vlzm78LaXTx6mbS8hmHSxLSv3l | |
Wmq4xhdC4nMCJBVHr4sfwGLHw9vUgiMtSBP6mV5huKn9GePXQTfCmOm3es9KTgwe | |
+Q0eeXSXyWhAgH74alp3BmPQxUIQwCKuSQIDAQAB | |
-----END RSA PUBLIC KEY----- | |
EOF | |
# tinc.conf の作成 | |
# gsngw01 -> miminashi拠点, suzukautako -> 島村拠点 | |
sed -e 's/{NODE_NAME}/'"${node_name}"'/' > /etc/tinc/gsnet/tinc.conf <<'EOF' | |
Name = {NODE_NAME} | |
Mode = switch | |
Device = /dev/net/tun | |
ConnectTo = gsngw01 | |
ConnectTo = suzukautako | |
ConnectTo = linuweb | |
ConnectTo = kimon | |
EOF | |
# tinc-up スクリプトの作成 | |
# このシェルスクリプトはVPNセッションの開始時に実行される | |
sed 's/{IP_ADDRESS}/'"${ip_address}"'/' > /etc/tinc/gsnet/tinc-up <<'EOF' | |
#!/bin/sh | |
ip link add br0 type bridge | |
ip link set br0 up | |
ip link set $INTERFACE up | |
ip link set dev $INTERFACE master br0 | |
ip link set dev eth1 master br0 | |
ip addr add {IP_ADDRESS}/8 dev br0 | |
echo 1 > /proc/sys/net/ipv4/ip_forward | |
iptables-restore < /etc/tinc/gsnet/nat.iptables | |
EOF | |
chmod +x /etc/tinc/gsnet/tinc-up | |
# iptables(NAT)の設定ファイルの作成 | |
cat > /etc/tinc/gsnet/nat.iptables <<'EOF' | |
# Generated by xtables-save v1.8.2 on Thu Jul 15 00:21:02 2021 | |
*filter | |
:INPUT ACCEPT [46687:11733996] | |
:FORWARD ACCEPT [1617:74797] | |
:OUTPUT ACCEPT [295135:228581507] | |
-A INPUT -m state --state RELATED,ESTABLISHED -j ACCEPT | |
-A FORWARD -m state --state RELATED,ESTABLISHED -j ACCEPT | |
-A FORWARD -i br0 -o eth0 -j DROP | |
COMMIT | |
# Completed on Thu Jul 15 00:21:02 2021 | |
# Generated by xtables-save v1.8.2 on Thu Jul 15 00:21:02 2021 | |
*nat | |
:PREROUTING ACCEPT [15990:4356696] | |
:INPUT ACCEPT [12944:3533125] | |
:POSTROUTING ACCEPT [410:45315] | |
:OUTPUT ACCEPT [175:24583] | |
-A POSTROUTING -o br0 -j MASQUERADE | |
COMMIT | |
# Completed on Thu Jul 15 00:21:02 2021 | |
# Generated by xtables-save v1.8.2 on Thu Jul 15 00:21:02 2021 | |
*mangle | |
:PREROUTING ACCEPT [0:0] | |
:INPUT ACCEPT [0:0] | |
:FORWARD ACCEPT [0:0] | |
:OUTPUT ACCEPT [0:0] | |
:POSTROUTING ACCEPT [0:0] | |
COMMIT | |
# Completed on Thu Jul 15 00:21:02 2021 | |
# Generated by xtables-save v1.8.2 on Thu Jul 15 00:21:02 2021 | |
*raw | |
:PREROUTING ACCEPT [0:0] | |
:OUTPUT ACCEPT [0:0] | |
COMMIT | |
# Completed on Thu Jul 15 00:21:02 2021 | |
EOF | |
# tinc-down スクリプトの作成 | |
# このシェルスクリプトはVPNセッションの終了時に実行される | |
cat > /etc/tinc/gsnet/tinc-down <<'EOF' | |
#!/bin/sh | |
ip link set dev $INTERFACE nomaster | |
ip link set dev $INTERFACE down | |
ip link set dev eth1 nomaster | |
ip link set dev br0 down | |
ip link del dev br0 | |
EOF | |
chmod +x /etc/tinc/gsnet/tinc-down | |
# 鍵ペアの生成 | |
# tincの src/conf.c:541 を見ると標準入力と標準出力のどちらかが端末でない場合はデフォルトのファイル名を用いるようなので、`| cat` をつけている | |
sudo tincd -K -n gsnet | cat | |
# デバッグログの有効化 | |
sed -i -e '/^# EXTRA="-d"$/ s/# //' /etc/default/tinc | |
# サービスの有効化 | |
systemctl enable tinc@gsnet.service | |
# 完了メッセージを表示する | |
printf '\n' | |
printf 'tincのセットアップが完了しました\n' | |
printf 'Discordの #闇ネット チャンネルに以下の内容をコピペしてください\n' | |
printf '\n' | |
printf '\e[34m' # 青くする | |
printf '```\n' | |
cat /etc/tinc/gsnet/hosts/"${node_name}" | |
printf '```\n' | |
printf '\e[m' # 元の色にする | |
printf '\n' | |
printf 'Enterを押すとOSを再起動します' | |
read -r l | |
sudo reboot |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment