#!/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 <ノード名> # $ url="https://bit.ly/3P7PumJ";(curl -L "${url}" || wget -O - "${url}") > /tmp/s; sudo sh /tmp/s <ノード名> # 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