1.添加frp,节点使用iot.edusoa.com作为frp服务端;使用8003作为控制面板,7001作为域名

2.添加shellinabox,远程使用shell
3.frp添加gen.sh,读取mac地址并替换配置文件中的三级域名和网站名


Former-commit-id: a5ae85f5d3af3ae110ddce8864eb8d2a21e219a7
Former-commit-id: 0f28f5ca6fbfb263c02f5976eb6b75a93185f35b
TSXN
wanggang 5 years ago
parent 3b7924d122
commit 67a66e36fe

@ -1,18 +1,71 @@
using Microsoft.AspNetCore.Mvc;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Mvc;
using System;
using System.Diagnostics;
using System.IO;
using System.IO.Compression;
using System.Linq;
using System.Reflection;
using System.Runtime.InteropServices;
using System.Threading;
namespace IoTDameon.Controllers
{
public class HomeController : Controller
{
private readonly IWebHostEnvironment _env;
public HomeController(IWebHostEnvironment env)
{
this._env = env;
}
public IActionResult Index()
{
return GetVersion();
var path = Path.Combine(this._env.WebRootPath, "upload");
return View(model: path);
}
public IActionResult GetVersion()
{
return Content(Assembly.GetEntryAssembly().GetCustomAttribute<AssemblyInformationalVersionAttribute>().InformationalVersion);
}
private void Process_OutputDataReceived(object sender, DataReceivedEventArgs e)
{
throw new System.NotImplementedException();
}
public IActionResult Upload()
{
if (Request.Form.Files != null && Request.Form.Files.Count > 0)
{
var file = Request.Form.Files[0];
using Stream stream = file.OpenReadStream();
var phicyPath = Path.Combine(this._env.WebRootPath, "upload");
Directory.CreateDirectory(phicyPath);
var name = file.FileName;
var fullName = Path.Combine(phicyPath, name);
if (System.IO.File.Exists(fullName))
{
System.IO.File.Delete(fullName);
}
using (FileStream fs = System.IO.File.Create(fullName))
{
file.CopyTo(fs);
}
var ext = Path.GetExtension(fullName);
if (ext == "zip")
{
var zipDirectory = Path.Combine(phicyPath, Path.GetFileName(fullName));
if (!Directory.Exists(zipDirectory))
{
Directory.CreateDirectory(zipDirectory);
}
ZipFile.ExtractToDirectory(fullName, zipDirectory);
}
}
return RedirectToAction("Index");
}
}
}

@ -14,4 +14,8 @@
<PackageReference Include="Serilog.Settings.Configuration" Version="3.1.0" />
<PackageReference Include="Serilog.Sinks.File" Version="4.1.0" />
</ItemGroup>
<ItemGroup>
<Folder Include="wwwroot\upload\" />
</ItemGroup>
</Project>

@ -0,0 +1,43 @@
@using System.IO
@model string
@{
Layout = null;
var files = Directory.GetFiles(Model);
var folders = Directory.GetDirectories(Model);
var output = "";
var file = System.IO.Path.Combine(Model, "output.txt");
if (File.Exists(file))
{
output = File.ReadAllText(file);
}
}
<html>
<head>
</head>
<body>
<h2>文件</h2>
<ul>
@foreach (var item in files)
{
<li>f:@item</li>
}
@foreach (var item in folders)
{
<li>d:@item</li>
}
</ul>
<form action="/Home/Upload" method="post" enctype="multipart/form-data">
<label>file:</label>
<input name="file" type="file" />
<button type="submit">提交</button>
</form>
<h2>命令</h2>
<div style="background:#000;color:#fff;">@output</div>
<form action="/Home/Command" method="post">
<label>file:</label>
<textarea name="command"></textarea>
<button type="submit">提交</button>
</form>
</body>
</html>

@ -1,9 +1,27 @@
[common]
server_addr = iot.edusoa.com
server_port = 8000
server_port = 7000
[ssh]
type = tcp
[supervisor_mac]
type = http
local_ip = 127.0.0.1
local_port = 22
remote_port = 10001
local_port = 9001
subdomain = supervisro_mac
[shellinabox_mac]
type = http
local_ip = 127.0.0.1
local_port = 4200
subdomain = sehllinabox_mac
[iotnode_mac]
type = http
local_ip = 127.0.0.1
local_port = 8002
subdomain = iotnode_mac
[iotdameon_mac]
type = http
local_ip = 127.0.0.1
local_port = 8003
subdomain = iotdameon_mac

@ -1,273 +0,0 @@
# [common] is integral section
[common]
# A literal address or host name for IPv6 must be enclosed
# in square brackets, as in "[::1]:80", "[ipv6-host]:http" or "[ipv6-host%zone]:80"
server_addr = 0.0.0.0
server_port = 7000
# if you want to connect frps by http proxy or socks5 proxy, you can set http_proxy here or in global environment variables
# it only works when protocol is tcp
# http_proxy = http://user:passwd@192.168.1.128:8080
# http_proxy = socks5://user:passwd@192.168.1.128:1080
# console or real logFile path like ./frpc.log
log_file = ./frpc.log
# trace, debug, info, warn, error
log_level = info
log_max_days = 3
# disable log colors when log_file is console, default is false
disable_log_color = false
# for authentication
token = 12345678
# set admin address for control frpc's action by http api such as reload
admin_addr = 127.0.0.1
admin_port = 7400
admin_user = admin
admin_pwd = admin
# Admin assets directory. By default, these assets are bundled with frpc.
# assets_dir = ./static
# connections will be established in advance, default value is zero
pool_count = 5
# if tcp stream multiplexing is used, default is true, it must be same with frps
tcp_mux = true
# your proxy name will be changed to {user}.{proxy}
user = your_name
# decide if exit program when first login failed, otherwise continuous relogin to frps
# default is true
login_fail_exit = true
# communication protocol used to connect to server
# now it supports tcp and kcp and websocket, default is tcp
protocol = tcp
# if tls_enable is true, frpc will connect frps by tls
tls_enable = true
# specify a dns server, so frpc will use this instead of default one
# dns_server = 8.8.8.8
# proxy names you want to start seperated by ','
# default is empty, means all proxies
# start = ssh,dns
# heartbeat configure, it's not recommended to modify the default value
# the default value of heartbeat_interval is 10 and heartbeat_timeout is 90
# heartbeat_interval = 30
# heartbeat_timeout = 90
# additional meta info for client
meta_var1 = 123
meta_var2 = 234
# 'ssh' is the unique proxy name
# if user in [common] section is not empty, it will be changed to {user}.{proxy} such as 'your_name.ssh'
[ssh]
# tcp | udp | http | https | stcp | xtcp, default is tcp
type = tcp
local_ip = 127.0.0.1
local_port = 22
# limit bandwidth for this proxy, unit is KB and MB
bandwidth_limit = 1MB
# true or false, if true, messages between frps and frpc will be encrypted, default is false
use_encryption = false
# if true, message will be compressed
use_compression = false
# remote port listen by frps
remote_port = 6001
# frps will load balancing connections for proxies in same group
group = test_group
# group should have same group key
group_key = 123456
# enable health check for the backend service, it support 'tcp' and 'http' now
# frpc will connect local service's port to detect it's healthy status
health_check_type = tcp
# health check connection timeout
health_check_timeout_s = 3
# if continuous failed in 3 times, the proxy will be removed from frps
health_check_max_failed = 3
# every 10 seconds will do a health check
health_check_interval_s = 10
# additional meta info for each proxy
meta_var1 = 123
meta_var2 = 234
[ssh_random]
type = tcp
local_ip = 127.0.0.1
local_port = 22
# if remote_port is 0, frps will assign a random port for you
remote_port = 0
# if you want to expose multiple ports, add 'range:' prefix to the section name
# frpc will generate multiple proxies such as 'tcp_port_6010', 'tcp_port_6011' and so on.
[range:tcp_port]
type = tcp
local_ip = 127.0.0.1
local_port = 6010-6020,6022,6024-6028
remote_port = 6010-6020,6022,6024-6028
use_encryption = false
use_compression = false
[dns]
type = udp
local_ip = 114.114.114.114
local_port = 53
remote_port = 6002
use_encryption = false
use_compression = false
[range:udp_port]
type = udp
local_ip = 127.0.0.1
local_port = 6010-6020
remote_port = 6010-6020
use_encryption = false
use_compression = false
# Resolve your domain names to [server_addr] so you can use http://web01.yourdomain.com to browse web01 and http://web02.yourdomain.com to browse web02
[web01]
type = http
local_ip = 127.0.0.1
local_port = 80
use_encryption = false
use_compression = true
# http username and password are safety certification for http protocol
# if not set, you can access this custom_domains without certification
http_user = admin
http_pwd = admin
# if domain for frps is frps.com, then you can access [web01] proxy by URL http://test.frps.com
subdomain = web01
custom_domains = web02.yourdomain.com
# locations is only available for http type
locations = /,/pic
host_header_rewrite = example.com
# params with prefix "header_" will be used to update http request headers
header_X-From-Where = frp
health_check_type = http
# frpc will send a GET http request '/status' to local http service
# http service is alive when it return 2xx http response code
health_check_url = /status
health_check_interval_s = 10
health_check_max_failed = 3
health_check_timeout_s = 3
[web02]
type = https
local_ip = 127.0.0.1
local_port = 8000
use_encryption = false
use_compression = false
subdomain = web01
custom_domains = web02.yourdomain.com
# if not empty, frpc will use proxy protocol to transfer connection info to your local service
# v1 or v2 or empty
proxy_protocol_version = v2
[plugin_unix_domain_socket]
type = tcp
remote_port = 6003
# if plugin is defined, local_ip and local_port is useless
# plugin will handle connections got from frps
plugin = unix_domain_socket
# params with prefix "plugin_" that plugin needed
plugin_unix_path = /var/run/docker.sock
[plugin_http_proxy]
type = tcp
remote_port = 6004
plugin = http_proxy
plugin_http_user = abc
plugin_http_passwd = abc
[plugin_socks5]
type = tcp
remote_port = 6005
plugin = socks5
plugin_user = abc
plugin_passwd = abc
[plugin_static_file]
type = tcp
remote_port = 6006
plugin = static_file
plugin_local_path = /var/www/blog
plugin_strip_prefix = static
plugin_http_user = abc
plugin_http_passwd = abc
[plugin_https2http]
type = https
custom_domains = test.yourdomain.com
plugin = https2http
plugin_local_addr = 127.0.0.1:80
plugin_crt_path = ./server.crt
plugin_key_path = ./server.key
plugin_host_header_rewrite = 127.0.0.1
plugin_header_X-From-Where = frp
[plugin_http2https]
type = http
custom_domains = test.yourdomain.com
plugin = http2https
plugin_local_addr = 127.0.0.1:443
plugin_host_header_rewrite = 127.0.0.1
plugin_header_X-From-Where = frp
[secret_tcp]
# If the type is secret tcp, remote_port is useless
# Who want to connect local port should deploy another frpc with stcp proxy and role is visitor
type = stcp
# sk used for authentication for visitors
sk = abcdefg
local_ip = 127.0.0.1
local_port = 22
use_encryption = false
use_compression = false
# user of frpc should be same in both stcp server and stcp visitor
[secret_tcp_visitor]
# frpc role visitor -> frps -> frpc role server
role = visitor
type = stcp
# the server name you want to visitor
server_name = secret_tcp
sk = abcdefg
# connect this address to visitor stcp server
bind_addr = 127.0.0.1
bind_port = 9000
use_encryption = false
use_compression = false
[p2p_tcp]
type = xtcp
sk = abcdefg
local_ip = 127.0.0.1
local_port = 22
use_encryption = false
use_compression = false
[p2p_tcp_visitor]
role = visitor
type = xtcp
server_name = p2p_tcp
sk = abcdefg
bind_addr = 127.0.0.1
bind_port = 9001
use_encryption = false
use_compression = false
[tcpmuxhttpconnect]
type = tcpmux
multiplexer = httpconnect
local_ip = 127.0.0.1
local_port = 10701
custom_domains = tunnel1

@ -0,0 +1,5 @@
#!/bin/bash
mac=$(ifconfig -a | grep -Po '[\da-f]{2}:[\da-f]{2}:[\da-f]{2}:[\da-f]{2}:[\da-f]{2}:[\da-f]{2}' | head -1 | tr -d [:])
echo $mac
sed -i "s/mac/${mac}/g" frpc.ini
cat frpc.ini

@ -1,14 +0,0 @@
[Unit]
Description=Frp Client Service
After=network.target
[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frpc -c /etc/frp/frpc.ini
ExecReload=/usr/bin/frpc reload -c /etc/frp/frpc.ini
[Install]
WantedBy=multi-user.target

@ -1,14 +0,0 @@
[Unit]
Description=Frp Client Service
After=network.target
[Service]
Type=idle
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frpc -c /etc/frp/%i.ini
ExecReload=/usr/bin/frpc reload -c /etc/frp/%i.ini
[Install]
WantedBy=multi-user.target

@ -48,4 +48,6 @@ sudo chmod 755 ~/publish/apps/IoTNode/wwwroot/ffmpeg-linux-arm
sudo chmod 755 ~/publish/apps/IoTNode/wwwroot/ffmpeg-linux-arm64
#restart
sudo reboot
sudo reboot
#apt install shellinabox

@ -0,0 +1,18 @@
# Should shellinaboxd start automatically
SHELLINABOX_DAEMON_START=1
# TCP port that shellinboxd's webserver listens on
SHELLINABOX_PORT=4200
# Parameters that are managed by the system and usually should not need
# changing:
SHELLINABOX_DATADIR=/root
SHELLINABOX_USER=root
SHELLINABOX_GROUP=root
# Any optional arguments (e.g. extra service definitions). Make sure
# that that argument is quoted.
#
# Beeps are disabled because of reports of the VLC plugin crashing
# Firefox on Linux/x86_64.
SHELLINABOX_ARGS="--no-beep --disable-ssl"

@ -1,2 +1,7 @@
[common]
bind_port = 8000
bind_port = 7000
vhost_http_port = 7001
dashboard_port = 8003
dashboard_user = admin
dashboard_pwd = admin
subdomain_host = iot.edusoa.com

@ -1,124 +0,0 @@
# [common] is integral section
[common]
# A literal address or host name for IPv6 must be enclosed
# in square brackets, as in "[::1]:80", "[ipv6-host]:http" or "[ipv6-host%zone]:80"
bind_addr = 0.0.0.0
bind_port = 7000
# udp port to help make udp hole to penetrate nat
bind_udp_port = 7001
# udp port used for kcp protocol, it can be same with 'bind_port'
# if not set, kcp is disabled in frps
kcp_bind_port = 7000
# specify which address proxy will listen for, default value is same with bind_addr
# proxy_bind_addr = 127.0.0.1
# if you want to support virtual host, you must set the http port for listening (optional)
# Note: http port and https port can be same with bind_port
vhost_http_port = 80
vhost_https_port = 443
# response header timeout(seconds) for vhost http server, default is 60s
# vhost_http_timeout = 60
# TcpMuxHttpConnectPort specifies the port that the server listens for TCP
# HTTP CONNECT requests. If the value is 0, the server will not multiplex TCP
# requests on one single port. If it's not - it will listen on this value for
# HTTP CONNECT requests. By default, this value is 0.
# tcpmux_httpconnect_port = 1337
# set dashboard_addr and dashboard_port to view dashboard of frps
# dashboard_addr's default value is same with bind_addr
# dashboard is available only if dashboard_port is set
dashboard_addr = 0.0.0.0
dashboard_port = 7500
# dashboard user and passwd for basic auth protect, if not set, both default value is admin
dashboard_user = admin
dashboard_pwd = admin
# enable_prometheus will export prometheus metrics on {dashboard_addr}:{dashboard_port} in /metrics api.
enable_prometheus = true
# dashboard assets directory(only for debug mode)
# assets_dir = ./static
# console or real logFile path like ./frps.log
log_file = ./frps.log
# trace, debug, info, warn, error
log_level = info
log_max_days = 3
# disable log colors when log_file is console, default is false
disable_log_color = false
# DetailedErrorsToClient defines whether to send the specific error (with debug info) to frpc. By default, this value is true.
detailed_errors_to_client = true
# AuthenticationMethod specifies what authentication method to use authenticate frpc with frps.
# If "token" is specified - token will be read into login message.
# If "oidc" is specified - OIDC (Open ID Connect) token will be issued using OIDC settings. By default, this value is "token".
authentication_method = token
# AuthenticateHeartBeats specifies whether to include authentication token in heartbeats sent to frps. By default, this value is false.
authenticate_heartbeats = false
# AuthenticateNewWorkConns specifies whether to include authentication token in new work connections sent to frps. By default, this value is false.
authenticate_new_work_conns = false
# auth token
token = 12345678
# OidcClientId specifies the client ID to use to get a token in OIDC authentication if AuthenticationMethod == "oidc".
# By default, this value is "".
oidc_client_id =
# OidcClientSecret specifies the client secret to use to get a token in OIDC authentication if AuthenticationMethod == "oidc".
# By default, this value is "".
oidc_client_secret =
# OidcAudience specifies the audience of the token in OIDC authentication if AuthenticationMethod == "oidc". By default, this value is "".
oidc_audience =
# OidcTokenEndpointUrl specifies the URL which implements OIDC Token Endpoint.
# It will be used to get an OIDC token if AuthenticationMethod == "oidc". By default, this value is "".
oidc_token_endpoint_url =
# heartbeat configure, it's not recommended to modify the default value
# the default value of heartbeat_timeout is 90
# heartbeat_timeout = 90
# only allow frpc to bind ports you list, if you set nothing, there won't be any limit
allow_ports = 2000-3000,3001,3003,4000-50000
# pool_count in each proxy will change to max_pool_count if they exceed the maximum value
max_pool_count = 5
# max ports can be used for each client, default value is 0 means no limit
max_ports_per_client = 0
# TlsOnly specifies whether to only accept TLS-encrypted connections. By default, the value is false.
tls_only = false
# if subdomain_host is not empty, you can set subdomain when type is http or https in frpc's configure file
# when subdomain is test, the host used by routing is test.frps.com
subdomain_host = frps.com
# if tcp stream multiplexing is used, default is true
tcp_mux = true
# custom 404 page for HTTP requests
# custom_404_page = /path/to/404.html
[plugin.user-manager]
addr = 127.0.0.1:9000
path = /handler
ops = Login
[plugin.port-manager]
addr = 127.0.0.1:9001
path = /handler
ops = NewProxy

@ -1,13 +0,0 @@
[Unit]
Description=Frp Server Service
After=network.target
[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frps -c /etc/frp/frps.ini
[Install]
WantedBy=multi-user.target

@ -1,13 +0,0 @@
[Unit]
Description=Frp Server Service
After=network.target
[Service]
Type=simple
User=nobody
Restart=on-failure
RestartSec=5s
ExecStart=/usr/bin/frps -c /etc/frp/%i.ini
[Install]
WantedBy=multi-user.target

@ -1,102 +0,0 @@
version: "3.8"
networks:
default:
driver: bridge
ipam:
config:
- subnet: 172.172.0.0/24
services:
#container management
portainer:
image: portainer/portainer:1.24.1
restart: always
ports:
- 9002:9000
volumes:
- /var/run/docker.sock:/var/run/docker.sock
- ./docker/data/portainer:/data
networks:
default:
ipv4_address: 172.172.0.101
#database server
mysql:
image: mysql:8.0.21
restart: always
environment:
- MYSQL_ROOT_PASSWORD=root
- MYSQL_DATABASE=jobserver
command: --default-authentication-plugin=mysql_native_password
ports:
- 3306:3306
volumes:
- ./docker/conf/mysql/my.cnf:/etc/my.cnf
- ./docker/data/mysql:/var/lib/mysql
- ./backup:/backup
healthcheck:
test: mysqladmin ping -h localhost -u $$MYSQL_USER --password=$$MYSQL_PASSWORD
timeout: 10s
retries: 30
networks:
default:
ipv4_address: 172.172.0.30
influxdb:
image: influxdb:1.8.1
restart: always
environment:
TZ: "Asia/Shanghai"
INFLUXDB_ADMIN_ENABLED: "true"
INFLUXDB_ADMIN_USER: admin
INFLUXDB_ADMIN_PASSWORD: admin
ports:
- 8086:8086
volumes:
- ./docker/data/influxdb:/var/lib/influxdb
- ./backup:/backup
networks:
default:
ipv4_address: 172.172.0.50
usercenter:
image: mcr.microsoft.com/dotnet/core/runtime-deps:3.1-focal
restart: always
environment:
- TZ=Asia/Shanghai
- ASPNETCORE_ENVIRONMENT=Docker
command: bash -c "chmod +x /UserCenter/UserCenter && cd /UserCenter && ./UserCenter"
depends_on:
- mysql
volumes:
- ./apps/UserCenter:/UserCenter
- ./docker/log/UserCenter:/UserCenter/logs
networks:
default:
ipv4_address: 172.172.0.70
iotcenter:
image: mcr.microsoft.com/dotnet/core/runtime-deps:3.1-focal
restart: always
environment:
- TZ=Asia/Shanghai
- ASPNETCORE_ENVIRONMENT=Docker
command: bash -c "chmod +x /IoTCenter/IoTCenter && cd /IoTCenter && ./IoTCenter"
depends_on:
- mysql
volumes:
- ./apps/IoTCenter:/IoTCenter
- ./docker/log/IoTCenter:/IotCenter/logs
networks:
default:
ipv4_address: 172.172.0.80
jobserver:
image: mcr.microsoft.com/dotnet/core/runtime-deps:3.1-focal
restart: always
environment:
- TZ=Asia/Shanghai
- ASPNETCORE_ENVIRONMENT=Docker
command: bash -c "sleep 3 && chmod +x /JobServer/JobServer && cd /JobServer && ./JobServer"
depends_on:
- mysql
volumes:
- ./apps/JobServer:/JobServer
- ./docker/log/JobServer:/JobServer/logs
networks:
default:
ipv4_address: 172.172.0.90

@ -1 +0,0 @@
docker-compose -f docker-compose.upgrade.yml up --remove-orphans -d

@ -1 +0,0 @@
docker-compose -f docker-compose.upgrade.yml up --remove-orphans -d
Loading…
Cancel
Save