Repository navigation
Expand file tree
/
Copy pathinstall_frpc.sh
More file actions
269 lines (230 loc) · 7.42 KB
/
Copy pathinstall_frpc.sh
File metadata and controls
269 lines (230 loc) · 7.42 KB
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
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
#!/bin/bash
# install_frpc.sh - Script de instalação interativa do FRP Client (frpc)
set -e
echo "========================================"
echo " Instalação Interativa do FRP Cliente"
echo "========================================"
# Função corrigida para validação obrigatória
obter_valor() {
local prompt="$1"
local valor_padrao="$2"
local variavel=""
while true; do
if [ -n "$valor_padrao" ]; then
read -p "$prompt (padrão: $valor_padrao): " variavel
# Se estiver vazio, usa o padrão
if [ -z "$variavel" ]; then
variavel="$valor_padrao"
fi
else
read -p "$prompt: " variavel
fi
# Se tiver valor, retorna
if [ -n "$variavel" ]; then
echo "$variavel"
return 0
fi
# Se chegou aqui e está vazio, mostra erro e continua no loop
echo "❌ Este campo é obrigatório."
done
}
# 1. Solicitar informações básicas de conexão
echo ""
echo "📋 INFORMAÇÕES DE CONEXÃO (OBRIGATÓRIAS)"
echo "----------------------------------------"
# Endereço do servidor
echo "🔧 Endereço IP ou domínio do seu servidor FRP (frps):"
SERVER_ADDR=$(obter_valor " → Digite o endereço" "")
# Porta
echo ""
echo "🔧 Porta de conexão do servidor FRP:"
PORTA_INPUT=$(obter_valor " → Digite a porta" "7000")
# Validar porta
while ! [[ "$PORTA_INPUT" =~ ^[0-9]+$ ]] || [ "$PORTA_INPUT" -lt 1 ] || [ "$PORTA_INPUT" -gt 65535 ]; do
echo "⚠️ Porta inválida. Use um número entre 1 e 65535."
PORTA_INPUT=$(obter_valor " → Digite a porta novamente" "7000")
done
SERVER_PORT="$PORTA_INPUT"
# Token
echo ""
echo "🔧 Token de autenticação (deve ser o mesmo do frps):"
AUTH_TOKEN=$(obter_valor " → Digite o token" "")
# 2. Determinar arquitetura do sistema
echo ""
echo "📦 Identificando arquitetura e baixando o FRP..."
ARCH=$(uname -m)
case $ARCH in
x86_64) ARCH="amd64" ;;
aarch64|arm64) ARCH="arm64" ;;
*)
echo "❌ Arquitetura não suportada: $ARCH"
echo " Baixe manualmente: https://github.com/fatedier/frp/releases"
exit 1
;;
esac
# Obter versão mais recente
echo " Obtendo versão mais recente do GitHub..."
TAG=$(curl -s https://api.github.com/repos/fatedier/frp/releases/latest | grep '"tag_name"' | sed -E 's/.*"([^"]+)".*/\1/' 2>/dev/null || echo "v0.54.0")
# Se não conseguir obter do GitHub, usa versão padrão
if [ -z "$TAG" ] || [ "$TAG" = "null" ]; then
TAG="v0.54.0"
echo " ⚠️ Não foi possível obter a versão do GitHub, usando: $TAG"
fi
VERSION=${TAG#v}
DOWNLOAD_URL="https://github.com/fatedier/frp/releases/download/${TAG}/frp_${VERSION}_linux_${ARCH}.tar.gz"
INSTALL_DIR="/opt/frp"
echo " Versão: $TAG"
echo " Arquitetura: $ARCH"
echo " URL: $DOWNLOAD_URL"
echo " Diretório: $INSTALL_DIR"
# Criar diretório e baixar
echo " Criando diretório de instalação..."
sudo mkdir -p "$INSTALL_DIR"
cd "$INSTALL_DIR"
echo " Baixando FRP..."
if ! sudo wget -q --show-progress -O frp.tar.gz "$DOWNLOAD_URL" 2>/dev/null; then
echo "❌ Falha ao baixar FRP. Verifique sua conexão."
exit 1
fi
echo " Extraindo arquivos..."
sudo tar -xzf frp.tar.gz --strip-components=1 2>/dev/null
sudo rm -f frp.tar.gz
# Verificar se o frpc foi extraído
if [ ! -f "frpc" ]; then
echo "❌ Arquivo frpc não encontrado após extração."
echo " Tentando listar arquivos extraídos:"
ls -la "$INSTALL_DIR"
exit 1
fi
echo "✅ Download concluído em $INSTALL_DIR"
# 3. Criar arquivo de configuração
echo ""
echo "⚙️ Criando arquivo de configuração frpc.toml..."
CONFIG_FILE="$INSTALL_DIR/frpc.toml"
# Criar arquivo com permissões corretas
sudo tee "$CONFIG_FILE" > /dev/null <<EOF
# Configuração do FRP Cliente (frpc)
# Gerado automaticamente em $(date)
serverAddr = "$SERVER_ADDR"
serverPort = $SERVER_PORT
auth.method = "token"
auth.token = "$AUTH_TOKEN"
# ===== PROXY 1: Servidor Minecraft (TCP) =====
[[proxies]]
name = "minecraft-tcp"
type = "tcp"
localIP = "127.0.0.1"
localPort = 25565
remotePort = 25565
# ===== PROXY 2: Simple Voice Chat (UDP) =====
[[proxies]]
name = "voicechat-udp"
type = "udp"
localIP = "127.0.0.1"
localPort = 24454
remotePort = 24454
# ===== PROXY 3: SSH (TCP) =====
[[proxies]]
name = "ssh"
type = "tcp"
localIP = "127.0.0.1"
localPort = 22
remotePort = 90
EOF
sudo chmod 644 "$CONFIG_FILE"
echo "✅ Arquivo criado: $CONFIG_FILE"
# Verificar conteúdo do arquivo
echo " Verificando conteúdo do arquivo..."
if [ -f "$CONFIG_FILE" ]; then
echo " Conteúdo do arquivo de configuração:"
echo " ------------------------------------"
sudo cat "$CONFIG_FILE"
echo " ------------------------------------"
else
echo "❌ Arquivo de configuração não foi criado!"
exit 1
fi
# 4. Criar e iniciar serviço systemd
echo ""
echo "🔄 Configurando serviço systemd..."
SERVICE_FILE="/etc/systemd/system/frpc.service"
# Verificar caminho do frpc
FRPC_PATH="$INSTALL_DIR/frpc"
if [ ! -f "$FRPC_PATH" ]; then
echo "❌ Binário frpc não encontrado em: $FRPC_PATH"
exit 1
fi
sudo tee "$SERVICE_FILE" > /dev/null <<EOF
[Unit]
Description=frp client service
After=network.target
[Service]
Type=simple
User=root
Restart=on-failure
RestartSec=5s
WorkingDirectory=$INSTALL_DIR
ExecStart=$FRPC_PATH -c $CONFIG_FILE
ExecReload=/bin/kill -HUP \$MAINPID
LimitNOFILE=1048576
StandardOutput=journal
StandardError=journal
[Install]
WantedBy=multi-user.target
EOF
echo " Recarregando systemd..."
sudo systemctl daemon-reload
echo " Habilitando serviço..."
sudo systemctl enable frpc
echo " Iniciando serviço..."
sudo systemctl start frpc
# 5. Verificar status
echo ""
echo "🔍 Verificando status..."
sleep 3
if sudo systemctl is-active frpc >/dev/null 2>&1; then
echo "✅ Serviço frpc está ATIVO!"
echo ""
echo "📜 Últimas linhas do log:"
sudo journalctl -u frpc -n 10 --no-pager
echo ""
echo "Para ver logs em tempo real: sudo journalctl -u frpc -f"
else
echo "⚠️ Serviço não está ativo."
echo ""
echo "📜 Verificando logs de erro:"
sudo journalctl -u frpc -n 20 --no-pager
echo ""
echo "Status do serviço:"
sudo systemctl status frpc --no-pager
fi
# 6. Resumo
echo ""
echo "========================================"
echo " INSTALAÇÃO CONCLUÍDA"
echo "========================================"
echo "📊 CONFIGURAÇÃO APLICADA:"
echo " • Servidor FRP: $SERVER_ADDR:$SERVER_PORT"
echo " • Token (início): ${AUTH_TOKEN:0:10}..."
echo " • Diretório: $INSTALL_DIR"
echo " • Config: $CONFIG_FILE"
echo ""
echo "🎮 PROXIES CONFIGURADOS:"
echo " 1. Minecraft TCP: $SERVER_ADDR:25565 → localhost:25565"
echo " 2. Voice Chat UDP: $SERVER_ADDR:24454 → localhost:24454"
echo " 3. SSH TCP: $SERVER_ADDR:90 → localhost:22"
echo ""
echo "🔧 COMANDOS DE GERENCIAMENTO:"
echo " sudo systemctl status frpc # Verificar status"
echo " sudo systemctl restart frpc # Reiniciar serviço"
echo " sudo systemctl stop frpc # Parar serviço"
echo " sudo journalctl -u frpc -f # Ver logs em tempo real"
echo ""
echo "⚠️ PRÓXIMOS PASSOS:"
echo " 1. No seu servidor FRP (VPS), abra as portas:"
echo " - TCP 25565 (Minecraft)"
echo " - UDP 24454 (Voice Chat)"
echo " - TCP 90 (SSH)"
echo " 2. Teste as conexões remotamente"
echo " 3. Configure os serviços locais para rodar"
echo "========================================"