MY HAOSE BLOG!!!

搭建 MTProto 的代理服务器 MTProxy

近日,Telegram 在俄罗斯遭封锁事件催生了基于其自有加密协议 MTProto 的代理服务器 MTProxy,官方源码使用 C 语言编写,托管于 TelegramMessenger/MTProxy。我试着在自己的 VPS 上搭建了一个,虽然官方文档非常简陋,但还算顺利。

服务器端编译

首先在 VPS (Ubuntu 18.04) 上克隆服务器端源码:

$ cd ~/dev/ $ git clone https://github.com/TelegramMessenger/MTProxy.git $ cd MTProxy

编译之前需要安装必要的工具链和开发库:

$ sudo apt install build-essential libssl-dev zlib1g-dev

然后在 MTProxy 源码的根目录下直接执行 make 即可,编译出的可执行文件是 objs/bin/mtproto-proxy

之前的 README.md 没有说明需要安装的库文件,make 时在链接阶段有如下错误:

/usr/bin/x86_64-linux-gnu-ld: cannot find -lz

就是因为没有安装 zlib1g-dev 导致的。

服务器端运行

为简化说明,直接在编译结果目录中操作:

$ cd objs/bin/

获取 AES 密钥用于连接 Telegram 服务器:

$ curl -s https://core.telegram.org/getProxySecret -o proxy-secret

使用 hd proxy-secret 看看密钥长哪样:

00000000  c4 f9 fa ca 96 78 e6 bb  48 ad 6c 7e 2c e5 c0 d2  |.....x..H.l~,...| 00000010  44 30 64 5d 55 4a dd eb  55 41 9e 03 4d a6 27 21  |D0d]UJ..UA..M.'!| 00000020  d0 46 ea ab 6e 52 ab 14  a9 5a 44 3e cf b3 46 3e  |.F..nR...ZD>..F>| 00000030  79 a0 5a 66 61 2a df 9c  ae da 8b e9 a8 0d a6 98  |y.Zfa*..........| 00000040  6f b0 a6 ff 38 7a f8 4d  88 ef 3a 64 13 71 3e 5c  |o...8z.M..:d.q>\| 00000050  33 77 f6 e1 a3 d4 7d 99  f5 e0 c5 6e ec e8 f0 5c  |3w....}....n...\| 00000060  54 c4 90 b0 79 e3 1b ef  82 ff 0e e8 f2 b0 a3 27  |T...y..........'| 00000070  56 d2 49 c5 f2 12 69 81  6c b7 06 1b 26 5d b2 12  |V.I...i.l...&]..|

获取 Telegram 服务器列表及配置(不定时更新,官方推荐每天重新获取一次):

$ curl -s https://core.telegram.org/getProxyConfig -o proxy-multi.conf

Telegram 服务器列表和配置长这样:

$ cat proxy-multi.conf  # force_probability 1 10 proxy_for 1 149.154.175.50:8888; proxy_for -1 149.154.175.50:8888; proxy_for 2 149.154.162.38:80; proxy_for 2 149.154.162.32:80; proxy_for -2 149.154.162.38:80; proxy_for -2 149.154.162.32:80; proxy_for 3 149.154.175.100:8888; proxy_for -3 149.154.175.100:8888; proxy_for 4 91.108.4.200:8888; proxy_for 4 91.108.4.212:8888; proxy_for 4 91.108.4.207:8888; proxy_for 4 91.108.4.168:8888; proxy_for 4 91.108.4.167:8888; proxy_for 4 91.108.4.138:8888; proxy_for 4 91.108.4.191:8888; proxy_for 4 91.108.4.136:8888; proxy_for 4 91.108.4.172:8888; proxy_for 4 91.108.4.156:8888; proxy_for -4 149.154.166.120:8888; proxy_for -4 149.154.165.109:8888; proxy_for 5 91.108.56.163:8888; proxy_for 5 91.108.56.118:8888; proxy_for -5 91.108.56.163:8888; proxy_for -5 91.108.56.118:8888;

生成密钥用于客户端连接代理服务器:

$ head -c 16 /dev/urandom | xxd -ps de731d1e955150d03ae40579efdfb3a3

记下这个密钥,后面还会多次用到。再以后台方式运行 mtproto-proxy

$ ./mtproto-proxy -u nobody -p 8888 -H 9527 -S de731d1e955150d03ae40579efdfb3a3 --aes-pwd proxy-secret proxy-multi.conf -M 0 &


eval nohup ./mtproto-proxy -u nobody -p 8888 -H 18080 -S

de731d1e955150d03ae40579efdfb3a3 --nat-info 10.0.0.4:104.42.186.214  --aes-pwd proxy-secret proxy-multi.conf >> /usr/local/mtproxy/mtproxy.log 2>&1 &

其中的几个参数说明如下:

  • nobody 为用户名,mtproto-proxy 调用 setuid() 以放弃权限。

  • 8888 为本地端口,用于获取统计数据。

  • 9527 为代理服务器端口,客户端使用此端口与代理服务器连接。

  • de731d1e955150d03ae40579efdfb3a3 为此前生成的密钥,同样用于客户端。也可同时指定多个密钥:-S <secret1> -S <secret2>

  • proxy-secret 为此前获取的用于连接 Telegram 服务器的 AES 密钥。

  • proxy-multi.conf 为此前获取的 Telegram 服务器列表及配置。

  • -M 参数指定除主线程之外的工作线程数目,此处指定为 0,仅用主线程。

看到主线程及工作线程(如果有)都进入 main loop 之后,表示代理服务器开始工作了:

[31648][2018-06-07 19:37:54.546575 local] Invoking engine mtproxy-0.01 compiled at Jun  7 2018 19:03:31 by gcc 7.3.0 64-bit after commit 580909cbca12a2f8529dbb387edf8e9bc5bd4e3a [31648][2018-06-07 19:37:54.546833 local] config_filename = 'proxy-multi.conf' [31648][2018-06-07 19:37:54.549856 local] Started as [X.X.X.X:8888:31648:1528371474] [31648][2018-06-07 19:37:54.550720 local] configuration file proxy-multi.conf re-read successfully (797 bytes parsed), new configuration active [31648][2018-06-07 19:37:54.551195 local] main loop

假如你的 VPS 开启了防火墙,别忘了允许对应的 TCP 端口接入,例如:

$ sudo iptables -A INPUT -p tcp --dport 9527 -j ACCEPT

此外,除了 TelegramMessenger/MTProxy 之外,官方还提供了 Docker 的方式搭建代理服务器。另有第三方的 Python、PHP 等其它语言的实现,详见 p1ratrulezzz/mtproxy-server-linux


一键脚本

wget -N --no-check-certificate https://raw.githubusercontent.com/ToyoDAdoubiBackup/doubi/master/mtproxy.sh && chmod +x mtproxy.sh

其他操作

启动:/etc/init.d/mtproxy start

停止:/etc/init.d/mtproxy stop

重启:/etc/init.d/mtproxy restart

查看状态:/etc/init.d/mtproxy status

安装目录:/usr/local/mtproxy

配置文件:/usr/local/mtproxy/mtproxy.conf

日志文件:/usr/local/mtproxy/mtproxy.log

服务器注册及分享

此步骤非必须,但出于互联网分享精神,建议有条件的同学注册并分享自己的代理服务器,同时可通过设置「赞助频道(sponsored channel)」的方式获益。

服务器注册步骤如下:

  • 添加官方机器人 @MTProxybot

  • 发送 /newproxy

  • 根据提示发送代理服务器地址及端口号: lancitou.net:9527

  • 再根据提示发送此前生成的密钥: de731d1e955150d03ae40579efdfb3a3

  • 注册完成

设置赞助频道的方法:

  • 发送 /myproxies,将列出你注册过的代理服务器列表

  • 选择要设置的代理服务器: lancitou.net XXXXXXXX(此处并非以端口号型号列出,而是在注册成功后生成的十六进制标签,形如 850594e9…,请注意不要与密钥混淆)

  • 再选择 Set promotion

  • 根据提示发送赞助频道的链接或用户名: https://t.me/waytocrypto@WayToCrypto

  • 设置完成

此后所有连接到这个代理服务器的客户端,都会在聊天主界面置顶显示对应的赞助频道了。

客户端设置

为支持 MTProxy,首先需要把客户端升级到最新版本(具体哪个版本开始支持的无从获知)。添加代理服务器有手动添加和自动添加两种方法。

手动添加

仅以 iOS 客户端为例。首次设置代理的入口比较隐蔽,在 Settings -> Data and Storage -> Use Proxy,点击 Add Proxy 并选择 MTProto 类型,填上代理服务器的 IP 或域名、端口号及密钥:

此后在 Settings 页面会出现 Proxy 直达入口,所有曾经连接过的代理服务器都列于此,并且会自动检测是否可用、延时大小等信息。

自动添加

在注册服务器阶段生成的两个链接就可以用于自动添加代理服务器,其中第一个链接是标准公网链接;第二个链接为 URL Scheme 链接,在安装了 Telegram app 的设备上才能使用:

以上



0分/0个投票

TOP


浏览: 555    评论: 0
使用Telegram-cli 自动发消息。。。

使用Telegram-cli 自动发消息

如今越来越多的网站使用Telegram Bot签到,telegram-cli 是一个Telegram的非官方客户端,可以实现在终端中访问Telegram,本文使用telegram-cli+crontab完成了自动签到  #### 在 CentOS 下安装 telegram-cli

快速编译安装



cd ~/
git clone --recursive https://github.com/vysheng/tg.git && cd tg
yum install jansson-devel lua-devel readline-devel libconfig-devel libevent-devel
./configure
make

将编译生成的bin/telegram-clitg-server.pub移动到同一目录下,这里创建一个mytg目录 > 不必在 https://my.telegram.org/apps 上获取publickey,除非此项目自带的key已经过时

mkdir mytg
cp bin/telegram-cli mytg/
cp tg-server.pub mytg/
cd mytg

mytg中创建telegram.config配置文件,并放入以下内容

vim telegram.config
default_profile = "mytg";

mytg = {
   config_directory = "./";
};

运行telegram-cli

./telegram-cli -k tg-server.pub -c telegram.config

   这里使用一个脚本文件来快速发送消息,新建~/tg/mytg/telegram_standalone.sh

vim ~/tg/mytg/telegram_standalone.sh
#!/bin/bash

MAIN_DIRECTORY="/root/tg/mytg/"
USER=$1
SUBJECT=$2
TEXT=$3

cd $MAIN_DIRECTORY
if [[ $? -ne 0 ]]; then
       echo "Error to enter in the main directory"
       exit 1
fi

./telegram-cli -k tg-server.pub -c telegram.config -WR -e "msg $USER $SUBJECT" || exit 1

exit 0

修改脚本权限

chmod +x ~/tg/mytg/telegram_standalone.sh

修改系统时区

如果使用国外VPS执行crontab定期任务,务必修改时区并重启crontab服务

修改为北京时区

ntpdate -u cn.pool.ntp.org
timedatectl set-timezone Asia/Shanghai

重启crontab服务

service crond restart

新建crontab任务

将vim设为默认文本编辑器

export VISUAL=vim

export EDITOR=vim

新建crontab任务,运行

crontab -e

将打开vim,进入Insert编辑模式,放入以下内容

* 10 * * * /root/tg/mytg/telegram_standalone.sh username 签到

其中,username 可修改为Telegram中任意Bot的id,签到 为向该Bot发送的签到指令,可任意修改,以上脚本每天上午10点会自动执行。

运行crontab -l 可查看目前创建的crontab任务。

假如你的账号添加了太多Telegram群组,telegram-cli可能无法接收/发送所有消息,可以使用dialog_list来加载会话列表或使用-w参数启动telegram-cli,使程序启动后会话列表先加载再发出信息。

关于telegram-cli更多的启动参数详见 https://github.com/vysheng/tg/wiki/Telegram-CLI-Arguments

Supported commands

Messaging

  • msg <peer> Text - sends message to this peer

  • fwd <user> <msg-seqno> - forward message to user. You can see message numbers starting client with -N

  • chat_with_peer <peer> starts one on one chat session with this peer. /exit or /quit to end this mode.

  • add_contact <phone-number> <first-name> <last-name> - tries to add contact to contact-list by phone

  • rename_contact <user> <first-name> <last-name> - tries to rename contact. If you have another device it will be a fight

  • mark_read <peer> - mark read all received messages with peer

  • delete_msg <msg-seqno> - deletes message (not completly, though)

  • restore_msg <msg-seqno> - restores delete message. Impossible for secret chats. Only possible short time (one hour, I think) after deletion

Multimedia

  • send_photo <peer> <photo-file-name> - sends photo to peer

  • send_video <peer> <video-file-name> - sends video to peer

  • send_text <peer> <text-file-name> - sends text file as plain messages

  • load_photo/load_video/load_video_thumb/load_audio/load_document/load_document_thumb <msg-seqno> - loads photo/video/audio/document to download dir

  • view_photo/view_video/view_video_thumb/view_audio/view_document/view_document_thumb <msg-seqno> - loads photo/video to download dir and starts system default viewer

  • fwd_media <msg-seqno> send media in your message. Use this to prevent sharing info about author of media (though, it is possible to determine user_id from media itself, it is not possible get access_hash of this user)

  • set_profile_photo <photo-file-name> - sets userpic. Photo should be square, or server will cut biggest central square part

Group chat options

  • chat_info <chat> - prints info about chat

  • chat_add_user <chat> <user> - add user to chat

  • chat_del_user <chat> <user> - remove user from chat

  • rename_chat <chat> <new-name>

  • create_group_chat <chat topic> <user1> <user2> <user3> ... - creates a groupchat with users, use chat_add_user to add more users

  • chat_set_photo <chat> <photo-file-name> - sets group chat photo. Same limits as for profile photos.

Search

  • search <peer> pattern - searches pattern in messages with peer

  • global_search pattern - searches pattern in all messages

Secret chat

  • create_secret_chat <user> - creates secret chat with this user

  • visualize_key <secret_chat> - prints visualization of encryption key. You should compare it to your partner's one

  • set_ttl <secret_chat> <ttl> - sets ttl to secret chat. Though client does ignore it, client on other end can make use of it

  • accept_secret_chat <secret_chat> - manually accept secret chat (only useful when starting with -E key)

Stats and various info

  • user_info <user> - prints info about user

  • history <peer> [limit] - prints history (and marks it as read). Default limit = 40

  • dialog_list - prints info about your dialogs

  • contact_list - prints info about users in your contact list

  • suggested_contacts - print info about contacts, you have max common friends

  • stats - just for debugging

  • show_license - prints contents of GPLv2

  • help - prints this help

  • get_self - get our user info

Card

  • export_card - print your 'card' that anyone can later use to import your contact

  • import_card <card> - gets user by card. You can write messages to him after that.

Other

  • quit - quit

  • safe_quit - wait for all queries to end then quit



0分/0个投票

TOP


浏览: 1719    评论: 0
MongoDB部署

1.1.  MongoDB部署

本次采用副本的部署方式,保证了数据安全和集群的可用性。本次共使用3台服务器,其中一台副本集主节点(172.17.120.121),两台副本节点(172.17.120.122172.17.120.123)。

1.1.1.   安装mongodb

第一步,在要安装mongodb集群的主机(172.17.120.121,172.17.120.122,172.17.120.123)创建mongodb用户,并设置密码(跟用户名一样),上传源码包mongodb-linux-x86_64-rhel62-3.2.7.tgz到三台主机的mongodb用户目录。

第二步:使用tar zxvf mongodb-linux-x86_64-rhel62-3.2.7.tgz解压文件。会再当前目录下生成一个mongodb-linux-x86_64-rhel62-3.2.7的目录,将目录重命名.

tar zxvf mongodb-linux-x86_64-rhel62-3.2.7.tgz

mv mongodb-linux-x86_64-rhel62-3.2.7  mongodb

 

建立副本集文件夹:

cd mongodb

mkdir -p replset/data

到此mongodb就安装好了,接下来开始配置。

1.1.2.   启动mongodb服务器

#yum install openssl-devel -y

172.17.120.121,172.17.120.122,172.17.120.123mongodb用户目录下执行命令:

cd ~

nohup ./mongodb/bin/mongod --port 27017 --dbpath=./mongodb/replset/data --replSet repset &

nohup ./mongodb/bin/mongod  -f  ./mongodb/etc/mongodb.conf --replSet repset &

 

来完成服务器的启动

 

mongodb.conf

 

dbpath = /home/mongodb/data/

fork=true

logpath = /home/mongodb/log/mongo.log

logappend=true

bind_ip = 172.17.120.121

port = 27017

~                 

1.1.3.   配置副本集

连接三台机器的任意一台,进入用户目录,执行命令:

cd ~

./mongodb/bin/mongo

 

./mongodb/bin/mongo 172.17.120.121:27017

 

 

#选择admin

use admin

#执行如下

config={_id:"repset", members:[{_id:0, host:" 172.17.120.121:27017"},{_id:0, host:" 172.17.120.122:27017"},{_id:1, host:" 172.17.120.123:27017", arbiterOnly: true}]}

#初始化副本集配置

rs.initiate(config);

 

1.1.4.   查看副本集服务器的配置

查看副本集情况:

cd ~

./mongodb/bin/mongo

rs.status();

 

设置副本节点可读,分别连接副本节点,然后执行:

cd ~

./mongodb/bin/mongo

db.getMongo().setSlaveOk();

 

1.1.5.   停止mongodb服务器

./mongodb/bin/mongod  --shutdown  --dbpath ./replset/data

 



0分/0个投票

TOP


浏览: 110    评论: 0
«   2024年6月   »
12
3456789
10111213141516
17181920212223
24252627282930
TOP 搜索
TOP 控制面板
您好,欢迎到访网站!
  [查看权限]
TOP 网站分类
TOP 热门评分
TOP 最高评分
TOP 最新评分
TOP 你好,朋友
真是美好的一天!
TOP 站点信息
  • 文章总数:5538
  • 页面总数:3
  • 分类总数:4
  • 标签总数:6
  • 评论总数:36
  • 浏览总数:8187975
返回顶部
haose888
返回顶部