New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
Network Engineering 网络工程师 #35
Comments
很多github.io个人网站打不开排除过超多原因(VPN, hosts,ISP,DNS)后,发现只针对github.io的话,最主要的是github.io全线强制性改成了必须用https访问。所以很多repo中显示的github.io的链接前没有加 |
Shadowsocks 服务器安装1.创建服务器 sudo apt-get update
sudo apt-get install python-pip -y
# 如果提示需要升级pip
# pip install --upgrade pip
pip install shadowsocks
sudo vi /etc/shadowsocks.json
{
"server":"0.0.0.0",
"server_port": 1111,
"password":"aaaaaaaa",
"local_address":"127.0.0.1",
"method":"aes-256-cfb",
"local_port":1080,
"timeout":300,
"fast_open":false
} sudo ssserver -c /etc/shadowsocks.json -d start 如果遇到 permission denied错误, 试一下改变下面文件权限: sudo chmod 777 /var/run/shadowsocks.pid
sudo chmod 777 /var/log/shadowsocks.log 如果还是不行,那么试试直接按照ssserver的路径启动:
|
❖ HTTP协议 学习 [DRAFT]主要看阮一峰入门: http://www.ruanyifeng.com/blog/2012/06/internet_protocol_suite_part_ii.html http://www.ruanyifeng.com/blog/2016/08/http.html 互联网协议,实际上不管是7层还是5层, { //实体层
“Head”: "头",
“Data: { //链接层
“Head”: “头”,
“Data: { //网络层
"Head": "头",
"Data": { // 传输层
"Head": "头",
"Data": { //应用层
"Head": "头",
"Data": ""
}
}
}
}
} |
Chrome无法访问某特定网页 但是Safari和其它浏览器能正常访问
尝试方法由于之前安装了 解决方案后记删除adblock插件后没多久就又无法访问了,所以再想别的问题。不断尝试后发现,只要把所有的url地址都强制改为 |
用Postman对手机抓包一般人会抓头,Postman明明是API调试工具,和抓包有什么关系。其实这也就是官方对一个小tip,本身存在是为了监控本机某端口数据包的。但其实,如果指定某一个监视端口,然后让同局域网的手机通过这台电脑的这个端口联网而已。这样的话Postman就间接监控到了手机数据包。 |
命令行方式的网络测速 Speed Test一般最靠谱的网速测速是 不过其实它还有命令行的访问方式,这种方式最适合树莓派或者远端服务器这样的看不到显示器的网速测试。 |
让curl通过shadowsocks连接shadowsocks是Socks5的连接方式。本地打开shadowsocks的客户端后,找到它在本机使用的端口。比如1080。然后输入如下命令就可以查看到效果:
其中 http://httpbin.org/ip 是一个可以返回访问者ip地址的网站。 |
❖ Linux上各种网络端口流量监控的工具对比使用
一键安装所有常用的网络监视软件: # Ubuntu
sudo apt-get install -y iftop dstat nload iptraf ifstat nethogs bmon slurm vnstat bwm-ng cbm speedometer
#Mac
brew install iftop dstat nload iftraf ifstat nethogs bmon slurm vnstat bwm-ng cbm speedometer
|
❖ SMTP协议SMTP(Simple Mail Transfer Protocol)即简单邮件传输协议。 邮件协议的理解首先要理解邮件传输的流程。一直以来都有个大误会:以为是别人从他的电脑直接给我的电脑上发邮件。其实真的不是。真实流程和上网浏览网页是一模一样的。来重现一下打开网页的技术流程: 你向网站发出一个request请求,网站答应后发个你一个response网页HTML,然后你就可以看到网页了。 邮件也是一样的。
理解了这点,协议就基本上明了了。然后编程发邮件就变得简单起来。 |
国内的网站经常缺乏样式、无法下载css等文件不管怎么设置proxy,就连关闭了proxy、关闭了adblock,国内网站如简书、豆瓣等大站,也经常显示不出来样式。查看chrome dev tool后发现,是他们使用的一些cdn完全无法连接。 然后怀疑是我使用的DNS出了问题。因为我本地网关(路由器)使用的是默认的小区宽带的默认DNS,不知道是哪里的。那个DNS很有可能功能出问题,导致很多网站的解析不正确。所以,我就把路由器里的DNS(或本机的DNS)设置为国内最好用的 然而:并不管用。 |
❖ Netdata 最帅Linux系统监控工具一直在找方便的监控Linux系统状态和网络进出的,试了很多种都各有优缺。只有Netdata是安装最简单、显示最好看、最全面的监控工具。
用脚本安装: # 基本安装(适合所有Linux系统)
$ bash <(curl -Ss https://my-netdata.io/kickstart.sh)
# 或者从头安装(安装所有依赖包)
$ bash <(curl -Ss https://my-netdata.io/kickstart-static64.sh) 脚本会检测当前系统环境,然后从头编译安装软件。 或者通过报管理器安装(目前各种包管理器的支持还不是很全):
安装大概占用28MB空间。 根据提示,netdata会在这些位置安装文件: 安装好后,就可以直接打开浏览器: Netdata在安装后,主要是作为 开关控制: # 启动:位置根据系统会有不同。建议加上-D参数前台运行,不要后台运行
$ sudo netdata -D
$ 或
$ sudo /usr/sbin/netdata -D
# 或(Mac上)
$ sudo /usr/local/sbin/netdata -D
# 关闭(方法很多种,往往只有一种生效)
$ sudo killall netdata
# 或
$ sudo pkill -9 netdata
# 或
$ sudo service netdata stop
# 或
$ sudo /etc/init.d/netdata stop
# 或
$ sudo systemctl stop netdata 卸载: # 找到卸载脚本位置(我的在/usr/src/netdata.git)
whereis netdata.git
# 进入那个位置
cd /usr/src/netdata.git
# 开始卸载
yes | sudo ./netdata-uninstaller.sh --force
# 删除其它遗留信息
sudo userdel netdata
sudo groupdel netdata
sudo gpasswd -d netdata adm
sudo gpasswd -d netdata proxy 卸载其它被安装的软件: yes | sudo apt-get purge ntop snapd 使用感受网页浏览庞大精确系统信息的确很爽。 卸载Netdata软件本身,和其它被这个安装的大量占用内存CPU的后台驻留软件后,重启服务器,又恢复了以前的速度。 更新近期Netdata在Reddit上发布了v1.12更新。 意思是:我认为我在AWS上的实例因为安装了Netdata监控,而占用了大量CPU和内存,导致SSH连接操作速度下降,所以卸载了Netdata。但是主创者认为Netdata不可能导致这个后果。 所以我又再一次安装了Netdata,下面是内存占用的截图: 这个是从Netdata的Dashboard从查看的应用CPU占用: 这个是从Netdata的Dashboard从查看的应用内存占用: 这个是从Netdata的Dashboard从查看的应用进程占用: 可以看到,各项应用占用, 当时卸载的原因就是各项它都排第一,所以认为是它导致的。 |
|
查看所有与本机连接的网络客户端IP假设自己是Server,想知道当前有多少人正在与自己连接,每个人的IP是什么。
$ netstat -pant 持续监视(利用watch命令): $ watch netstat -pant
旧版本的用法如下: $ watch netstat -ptcp -a |
❖ 理解子网掩码 Subnet Mask网络掩码的唯一目的是:在一串IP中,区分哪部分是 一般在家里局域网中,假设我自己的电脑IP是
如果要达到通过IP传输,就必须先找到 可以想象子网掩码是一个真的Mask面具: 那么,通过编程怎么实现这个"面具"呢? 计算过程:
|
❖ 一文入门跨平台的fswatch+rsync同步备份rsync是非常好用,但是只是极好的cp而已。如果要监控本地某些文件变化,自动上传,还需要配合其它监控工具。一般都叫watch, notify什么的。
参考GIthub官方网址:https://github.com/emcrisostomo/fswatch 安装 (Mac): $ brew install fswatch 使用,先直接输入命令试试: # 开始监控(进入block堵塞模式,动态输出变动)
# 假设监控/tmp文件夹
fswatch -0 /tmp | while read -d "" event; do
echo "This file ${event} has changed."
done 然后随意往 这时候,刚才正在监控的shell,就会立马显示出新创建的文件名 利用fswatch+rsync备份假如要监控 fswatch $1 | while read -d "" event; do
rsync -rauv --delete --progress /path/to/source/ /path/to/target/
done 但是fswatch默认会进入 多路径备份虽然fswatch能够同时监控多个目录:如 但是默认一个fswatch就进入堵塞模式,所以必须每次结束后转入后台,如 直接创建一个脚本 # 任务1
fswatch $1 | while read -d "" event; do
rsync -rauv --delete --progress /path/to/source1/ /path/to/target1/
done &
# 任务2
fswatch $1 | while read -d "" event; do
rsync -rauv --delete --progress /path/to/source2/ /path/to/target2/
done & 这样一来,我们不需要利用 至于fswatch的实现原理,这要涉及到Kernel内核的多任务运行机制。比如 要了解更多原理,就去查 |
❖ SSH 工具集 [DRAFT]SSH程序,如OpenSSH,都会包含一系列的工具如:
也就是说,只要本机装了SSH,就自动包括了这些工具,无需额外安装。 ssh-keygen非常简单的小命令,什么参数都不用输,一路按回车就能生成一对本机的密钥对。 如果需要对密钥对加上密码保护(pass_phrase),在交互过程中,可以输入,很简单。 关于生成密钥对,还有一些其它选项: ssh-copy-id是个极其方便的小命令,即把本机 命令很简单: $ ssh-copy-id 用户名@服务器地址 不加任何参数,命令就会把本机 $ ssh-copy-id -i /path/to/public_key ssh-agent简而言之,ssh-agent会管理本机的私钥,并记住私钥的密码,省去每次输入的麻烦。
主要步骤有两步: # 开启ssh-agent守护进程 (使用反引号)
$ eval `ssh-agent`
# 将默认私钥(~/.ssh/id_rsa) 添加到agent管理之中
$ ssh-add
# 或,将指定私钥加入管理
$ ssh-add /path/to/key
# 关闭agent
pkill ssh-agent 这就完成了! 明明已经有了一对密钥,为什么还需要ssh-agent? 密钥对对问题是,一个不小心,把私钥的这个小文本文件泄露到不该泄露的地方,就一切防御都化为虚有了,供人随意出入。所以一般要对这个小文本文件本身再有一个加密才安全。 所以ssh-agent是个逻辑问题,程序本身倒是没什么很值得研究的。 |
❖ Webdav (Apache) 的文件权限问题Apache的Webdav实现是目前最稳定最完善的,所以这里就只讲Apache版本的问题。 这个实现最主要混淆的地方,就是文件权限问题。即我们默认赋予了webdav共享文件夹 如果再加上是跑在docker容器里的apache版Webdav,那么问题就更复杂一步了:docker里面和host主机上分别怎么对同一个文件夹设置权限组? Stackoverflow了一下发现最简单的解决方案: sudo chown -R YOURNAME:www-data /var/www/webdav
sudo chmod -R g+s /var/www/webdav 这种做法是,把webdav文件夹的权限设为
|
❖ 理解Virtualbox虚拟机的四种网络连接方式 [DRAFT]参考:快速理解VirtualBox的四种网络连接方式 Virtualbox连接网络一共有四种方式(其它虚拟机也都差不多一样的称呼):
但是:
|
❖ Virtualbox连接网络设置需求一:让虚拟机又能访问外网又可以与主机对话这就是需要用到Virtualbox 双网卡适配器。
首先在Virtualbox软件的全局设置然后设置虚拟主机首先要在虚拟主机关闭的情况下设置。 开启2个Adapter:NAT和Host-only 然后进入虚拟机(Linux)后,就可以通过 可以在自己的Host机子上ping一下这个虚拟机,发现可以ping通。 反过来,在虚拟机里ping一下Host(刚才设置全局的一个内网时候的192.168.56.1就是)。 需求二:让虚拟机又能访问外网又在Wifi同网段和需求一差不多,这里只做简单的改变:
其中Bridge设置如下: 进入虚拟机后,输入命令 |
Shadowsocks-libev安装Shadowsocks服务器分为很多版本,每个版本都同时包含server和client等程序,每个版本所使用的JSON配置文件也都完全一样。不同的只有启动方式、速度、体积、网络处理方式等等。 ss-libev这个版本是C语言写的,体积小速度快。 安装Ubuntu / Debian / 树莓派等安装方法: sudo apt-get install -y shadowsocks-libev 如果一些平台不支持,则需要自行编译,但是不推荐。 # Dependencies
yes | sudo apt-get install --no-install-recommends gettext build-essential autoconf libtool libpcre3-dev asciidoc xmlto libev-dev libc-ares-dev automake libmbedtls-dev libsodium-devA && \
echo "[OK]"
mkdir -p ~/local/build_source/
cd ~/local/build_source/
# Installation of libsodium
export LIBSODIUM_VER=1.0.16
wget https://download.libsodium.org/libsodium/releases/libsodium-$LIBSODIUM_VER.tar.gz && \
tar xvf libsodium-$LIBSODIUM_VER.tar.gz && \
pushd libsodium-$LIBSODIUM_VER && \
./configure --prefix=/opt && \
make && sudo make install && \
popd && sudo ldconfig && echo "[OK]"
# Installation of MbedTLS
export MBEDTLS_VER=2.6.0 && \
wget https://tls.mbed.org/download/mbedtls-$MBEDTLS_VER-gpl.tgz && \
tar xvf mbedtls-$MBEDTLS_VER-gpl.tgz && \
pushd mbedtls-$MBEDTLS_VER && \
make SHARED=1 CFLAGS=-fPIC && \
sudo make DESTDIR=/opt install && \
popd && sudo ldconfi && echo "[OK]"
git clone https://github.com/madeye/shadowsocks-libev.git
cd shadowsocks-libev
git submodule update --init --recursive
# Start building
./autogen.sh && \
./configure --prefix=/opt/shadowsocks-libev && \
make && sudo make install && \
echo "[ OK ]" 这个编译步骤目前没法保证都能成功,还要仔细研究。。。 配置配置文件和一般都ss-local方法一样。 shadowsocks-libev的配置文件一般位于: {
"server":"My-Server-IP-Address",
"server_port": 8888,
"local_port": 1080,
"password":"password123",
"method":"aes-256-gcm",
"timeout": 10
} 启动停止方法和其它版本不同,这个版本比较好操作: 客户端: # 前端启动(无需多余参数),停止的话直接Ctrl+C
$ ss-local
# 以后台服务启动
|
Linux命令行FTP客户端FTPUbuntu安装: $ sudo apt-get install ftp 使用: ftp <URL>
ftp> ls
ftp> cd <path>
# 设置下载至的本地文件夹
ftp> lcd /home/Jason/ftpshare
ftp> get <FILE NAME> curlftpfs将FTP映射为本地文件夹,正常操作。 Ubuntu安装: $ sudo apt-get install curlftpfs
# 挂载
$ mkdir ~/ftpshare
$ curlftpfs <URL> ~/ftpshare
# 解除挂载
sudo umount ~/ftpshare |
❖ HTTP 的重定向一直好奇,当我们request一个URL时候,它是怎么在后台就转向了。 也就是说,命令客户端的浏览器对一个URL重定向的方法有:
通过Status Code状态码重定向这种方法是最标准、适应度最广泛的:也就是无需HMTL,无需浏览器,无需BODY,只要Headers即可要求接收者重定向。 原理图: 要求重定向的状态码有:
Python获取每次重定向的地址一般来说,我们用 r = requests.get(uri, allow_redirects=True)
print( r.url )
for jump in r.history:
print( jump.url ) 但是最近在使用一些WebAPI时候,如Oauth2.0的时候,只有登录后才会重定向。 |
❖ Session & Cookies [DRAFT]DRAFT
Session is just a value of sessionID, as a temporary REFERENCE to userID. Reasons of using session:
Session storage:
|
❖ Is socket a file? [DRAFT]Yes, socket IS a file! Refer to: Is there a file for each socket? Where is the file for each socket? |
Linux挂载Webdav共享文件夹 (davfs2) [DRAFT]参考:Ubuntu 16.04: Install davfs2 for WebDAV client 需要用到 Ubuntu、树莓派安装: $ sudo apt install davfs2 -y
# 进入交互
#。。。
# 或者设置默认选项,免交互安装:
cat <<EOF | sudo debconf-set-selections
davfs2 davfs2/suid_file boolean false
EOF
sudo apt install davfs2 -y 挂载远程Webdav共享文件夹: $ sudo mount -t davfs "地址" /path/to/mount/point/
# 然后进入交互,输入用户名和密码
# ...
# OK完成挂载 完成挂载后,就可以像正常访问本地文件夹一样在命令行里操作了。 在fstab中设置自动挂载安全的记住密码自动登陆davfs2体验虽然直接把webdav共享文件夹映射为本地磁盘/文件夹用起来很方便,但是缺点也和其它所有把网盘映射为文件系统的程序一样很明显:速度太慢!而且卡顿起来会把整个系统都卡住!别的什么事都做不了。 |
Webdav的命令行客户端体验 [DRAFT]支持Webdav的GUI客户端实在太多了,不说Windows和Mac的原生支持,还有各种Cybderduck等软件也支持。 目前收集的主流命令行客户端如下:
|
❖ HTTP协议入门 [DRAFT]注意事项:
HTTP协议的1.0与1.1的版本对比
短连接、长连接,指的是一次连接的时长、或一次连接能完成的请求次数多少。 一个网站页面往往包括HTML、多张图片等资源,如果仍然使用 如何做到长连接?很简单,只要在 |
❖ 网页视频流HLS 格式(m3u8/ts)视频下载现在很多视频网站播放流视频,都不是采用mp4/flv文件直接播放,而是采用 简单说就是,网站后台把视频切片成成百上千个 通过Chrome DevTool的Network栏,我们可以清楚的看到加载过程: 我们直接点击这个
那我们怎么下载呢? 下载视频所有的ts切片文件一般的思路是,想办法把所有的ts切片文件下载下来,然后合成一个完整的视频。 我们就直接执行这一句命令即可: $ ffmpeg -i <m3u8-path> -c copy OUTPUT.mp4
$ ffmpeg -i <m3u8-path> -vcodec copy -acodec copy OUTPUT.mp4
# 例如:
ffmpeg -i https://v6.438vip.com/2018/10/17/3JAHPTdvPhQb9LrE/playlist.m3u8 -c copy OUTPUT.mp4 然后就会看到这样的下载过程: 为什么下载播放列表就能下载所有的切片文件? 必须登录的视频下载
Chrome插件下载HLS流视频目前推荐的Chrome插件有: Chrome插件因为是在浏览器里的,所以直接可以获取cookies和user-agent,只要自己能看,插件就能下载。 Wget/Curl下载HLS流视频简单来说,就是把 |
What is CSRF (Cross Site Request Forgery)Refer to: Cross Site Request Forgery - Computerphile The attack is to make your own web page including a hidden Usually it won't work because the HTTP asks to have a How to stop that request from other sites if they don't have the And here comes the brief summary: |
利用Haproxy实现Shadowsocks负载均衡 [DRAFT]
树莓派本地Shadowsocks-client客户端安装与配置# 这样可以安装到最新版本,有更多的加密算法。直接用pip装可能只支持很低的版本
$ sudo pip install https://github.com/shadowsocks/shadowsocks/archive/master.zip
# 创建客户端配置文件(自行操作)
$ touch ~/ss-local.json
$ vim ~/ss-local.json 客户端配置(注意local地址必须是0.0.0.0这样才能收到来自局域网的请求): {
"server":"服务器公网地址",
"server_port": "服务器端口",
"local_address":"0.0.0.0",
"local_port":1080,
"password":"ss密码",
"timeout":600,
"method":"加密方式"
} 开启客户端,也就是允许转发: # 手动启动客户端
# 在未确定是否能联通之前,最好先用这种方式,显示输出连接信息
$ sslocal -c ~/ss-local.json -v
# 在命令行中验证
$ export all_proxy=socks5://0.0.0.0:1080
$ curl http://httpbin.org/ip
{
"origin": "此处如果显示的是服务器地址就对了,如果是本机地址就没生效"
} sslocal报错:Unsupported SOCKS protocol version 71在调试期间,我们倾向于让 这个问题的本质不是ss的问题,而是连接一方的错误:
sslocal 报错:libsodium not found参考:https://github.com/RubyCrypto/rbnacl/wiki/Installing-libsodium sudo apt-get install libsodium18 本地开启多个sslocal实例用来连接多台服务器
Haproxy安装与配置参考:https://tianws.github.io/skill/2019/07/11/gfw/ $ sudo apt install haproxy -y
$ sudo mv /etc/haproxy/haproxy.cfg /etc/haproxy/haproxy.cfg.bak # 备份
$ sudo vim /etc/haproxy/haproxy.cfg # 编辑配置文件 配置文件设置: global
log /dev/log local0
log /dev/log local1 notice
user root
group root
daemon
defaults
log global
mode tcp
timeout connect 5s
timeout client 5s
timeout server 5s
option dontlognull
option redispatch
retries 3
listen status
bind *:1111
mode http
stats refresh 30s
stats uri /status
stats realm Haproxy
stats auth admin:admin
stats hide-version
stats admin if TRUE
frontend shadowsocks-in
mode tcp
bind *:8388
default_backend shadowsocks-out
backend shadowsocks-out
mode tcp
option tcp-check
balance roundrobin
server servername1 xxxxx1.com:8088 check
server servername2 xxxxx2.net:8080 check
server servername3 12.34.56.78:9999 check
server servername4 123.234.234.123:443 check 使用Haproxy: sudo service haproxy start|stop|status|reload|restart|force-reload # 控制 haproxy 的运行 为了让haproxy更自由启动停止,我们可以屏蔽掉haproxy的service服务,这样就不会自动开机启动它:
Haproxy启动失败# 启动
$ sudo service haproxy start
Job for haproxy.service failed because the control process exited with error code.
See "systemctl status haproxy.service" and "journalctl -xe" for details.
#检查日志
● haproxy.service - HAProxy Load Balancer
Feb 09 09:37:50 raspberrypi systemd[1]: haproxy.service: Unit entered failed state.
Feb 09 09:37:50 raspberrypi systemd[1]: haproxy.service: Failed with result 'exit-code'.
Feb 09 09:37:50 raspberrypi systemd[1]: haproxy.service: Service hold-off time over, scheduling restart. 从这里看不出什么,那就停止haproxy服务,然后用前台运行的方式来看看哪里出的问题: $ sudo service haproxy stop
# -d表示debug模式,前台运行,-V表示增强输出信息
$ haproxy -f /etc/haproxy/haproxy.cfg -d -V
[ALERT] 039/093841 (4776) : Starting frontend shadowsocks-in: cannot bind socket [0.0.0.0:8388] 然后根据问题各种改配置就好了,比如端口被占用,就换端口,用户名不对,就改用户名等等。 Haproxy正常启动后,就会产生一个主页显示统计信息,可以从局域网访问 (端口号和登录页面的用户名密码都是刚刚在配置文件里面配置的) 可选的负载均衡策略
但是这都不能保证 结合Keepalive做健康检查
将sock5流量转发为Http流量即使很多程序直接连接socks5代理协议的端口,但还是没有Http协议的支持范围广,所以为了方便我们可以建立一个接收Http代理请求的转发器,把接收到的流量转发到sock5的端口。 最常用的转发器就是 参考:http://einverne.github.io/post/2018/03/privoxy-forward-socks-to-http.html sudo apt-get install privoxy -y
# 修改配置文件
sudo vim /etc/privoxy/config
#/etc/privoxy/config
forward-socks5t / 127.0.0.1:1080 .
listen-address 0.0.0.0:1090
# 上面一定要用0.0.0.0,这样就可以接收局域网Http请求。然后把请求转发到本地的socks5接口
#停止后台自动启动的privoxy服务
sudo systemctl stop privoxy
#手动指定配置文件,并在前台启动 (利于debug和监测)
privoxy --no-daemon /etc/privoxy/config 尝试是否成功:
如果显示的IP地址,是之前为1080的socks5端口设置的IP地址,则正确完成了转发。 为了让Privoxy更自由启动停止,我们可以屏蔽掉Privoxy的service服务,这样就不会自动开机启动它:
使用Nginx代替Haproxy作为高可用负载均衡
实战证明:虽然Haproxy更容易配置,但是如果backend服务器都不是很稳定的情况下,丢包率严重(一个网页只能加载部分内容)。而且Haproxy对轮训的策略支持有限,对地理位置的访问限制也不支持。 sudo apt-get install nginx -y
# 查看nginx信息,确保具备 with-stream功能
nginx -V |grep with-stream
# 关掉默认开启启动的nginx服务,因为之后我们要手动在前台启动
sudo systemctl stop nginx
sudo systemctl disable nginx
# 备份nginx配置
cd /etc/nginx
sudo cp -a nginx.conf{,_$(date +%F)}
# 创建自定义配置(文件名必须一致)
sudo mkdir /etc/nginx/tcp.d
sudo touch /etc/nginx/tcp.d/openldap.conf
# 让Nginx主配置引用我们自定义的配置
sudo echo "include /etc/nginx/tcp.d/*.conf;" >> /etc/nginx/nginx.conf
# 编辑自定义配置
sudo vim /etc/nginx/tcp.d/openldap.conf 添加如下内容:
然后重启: #重启前检查配置是否有写错的地方:
sudo nginx -t -c /etc/nginx/nginx.conf
#重启nginx
# sudo systemctl restart nginx
# 单独开一个shell,在前台运行nginx:
sudo nginx -c /etc/nginx/nginx.conf -g 'daemon off;'
#测试
telnet 0.0.0.0 1070
#正确的显示:
Trying 0.0.0.0...
Connected to 0.0.0.0.
Escape character is '^]'.
# 按Ctrl-] 推出telnet 能不能使用Nginx对某些地域IP进行屏蔽?
如果真的在这个层面有屏蔽需求,那么可以直接用 |
SSH 端口转发本地端口转发: 从本地的一个端口转发到另一个接口首先确认端口转发功能在配置里是开的: sudo vim /etc/ssh/sshd_config
# 开启tcp转发
AllowTcpForwarding yes
# 重启sshd
sudo /etc/rc.d/init.d/sshd restart |
简单方法理解Nginx反向代理参考:https://www.zybuluo.com/orangleliu/note/478334 安装Nginx略过(要求版本1.9以上)。 sudo echo "include /etc/nginx/tcp.d/*.conf;" >> /etc/nginx/nginx.conf
sudo vim /etc/nginx/tcp.d/openldap.conf 配置里,我们将要让Nginx把7777端口作为对外暴露的前台端口,然后选用两个让后台服务器:即bash小程序
配置内容可以直接从字面理解。参考图例:
重启nginx,让配置生效: 这时候,Nginx还没有接到任何请求,我们必须先把那两个“史上最简单服务器”建立起来以应付将来的请求: # 单独开启一个shell来创建这个服务器:
nc -l 7001
# 再单独开启另一个shell作为第二台服务器:
nc -l 7002 然后用 telnet 127.0.0.1 7777 然后我们可以看到,第一个服务器7001先响应了。这时候可以假装在服务端(telnet)和客户端(nc)之间互相发消息了。 由于我们之前把前台端口暴露到 telnet 服务器公网IP地址:777 如果我们把telnet断开,再连一遍,会发现这时候7002响应了。也就是说Nginx把另一个连接自动配给下一个请求。 |
BBR锐速:升级Linux内核安装GoogleBBR的TCP算法一般都是用一键安装脚本来安装。 |
Linux命令监控外来网络连接
|
Nginx及依赖库的编译安装参考:https://segmentfault.com/a/1190000014783064 安装顺序是:
cd /tmp
# 安装PCRE, 官方下载列表:https://ftp.pcre.org/pub/pcre/
# 注意:一定不要选PCRE版本2xx,因为会在nginx安装时候出错
wget https://ftp.pcre.org/pub/pcre/pcre-8.36.tar.gz
tar -xzvf pcre-8.36.tar.gz
# 安装OpenSSL, 官方下载列表:https://www.openssl.org/source/:
wget https://www.openssl.org/source/openssl-1.1.0g.tar.gz
tar -xzvf openssl-1.1.0g.tar.gz
# 安装Zlib, 官方下载列表:http://www.zlib.net/
wget https://downloads.sourceforge.net/project/libpng/zlib/1.2.11/zlib-1.2.11.tar.gz
tar -xzvf zlib-1.2.11.tar.gz 安装其它依赖包: # GeoIP 模块
sudo apt-get install libgeoip-dev -y
# HTTP XSLT 模块
sudo apt-get install libxslt-dev -y 安装Nginx,并指定某些依赖包的位置: cd /tmp
# 官方下载列表:https://nginx.org/en/download.html
wget https://nginx.org/download/nginx-1.16.1.tar.gz
tar -xzvf nginx-1.16.1.tar.gz
cd nginx-1.16.1
# 开始编译安装
./configure \
--prefix=/usr/local/nginx \
--conf-path=/usr/local/nginx/conf/nginx.conf \
--http-log-path=/usr/local/nginx/logs/access.log \
--error-log-path=/usr/local/nginx/logs/error.log \
--lock-path=/usr/local/nginx/nginx.lock \
--pid-path=/usr/local/run/nginx.pid \
--with-debug \
--with-pcre-jit \
--with-http_ssl_module \
--with-http_stub_status_module \
--with-http_gzip_static_module \
--with-http_realip_module \
--with-http_auth_request_module \
--with-http_addition_module \
--with-http_dav_module \
--with-http_geoip_module \
--with-http_gunzip_module \
--with-http_v2_module \
--with-http_sub_module \
--with-http_xslt_module \
--with-stream \
--with-stream_ssl_module \
--with-mail \
--with-mail_ssl_module \
--with-threads \
--with-file-aio \
--with-pcre=/tmp/pcre-8.36 \
--with-openssl=/tmp/openssl-1.1.0g \
--with-zlib=/tmp/zlib-1.2.11 \
&& make && make install && echo OK.
# 为了用起来方便,可以改下权限,省去sudo:
sudo chown -R ubuntu:ubuntu /usr/local/nginx/ 注意:
|
Nginx配合GeoIP实现block某些国家地区的访问
# 安装数据库及相关的lib
sudo apt-get install geoip-database libgeoip1 libgeoip-dev
# 备份
sudo mv /usr/share/GeoIP/GeoIP.dat /usr/share/GeoIP/GeoIP.dat_bak
# 下载最新的库,只有4k左右 (如果此连接失效,则搜索 "github GeoIP.dat")
cd /usr/share/GeoIP/
sudo wget https://github.com/maxmind/geoip-api-c/raw/master/data/GeoIP.dat
# 此时目录有:
/usr/share/GeoIP$ ls
GeoIP.dat GeoIP.dat_bak GeoIPv6.dat 然后需要配置nginx的主配置文件: http {
# 其它配置...
# 这个地方只是用来设置 $allowed_country 变量值
geoip_country /usr/share/GeoIP/GeoIP.dat;
map $geoip_country_code $allowed_country {
default no;
CN yes;
US no;
}
# IF语句必须放在http的server的location里面才行:
server {
location / {
if ($allowed_country = no) {
return 404;
}
# 也可以这么写,更简单直接,连上面的map字典也用不到:
if ($geoip_country_code = CN) {
return 404
}
}
}
# 其它配置...
} |
iptables的乾坤大挪移流量转发、端口转发——俗称NAT,翻译为乾坤大挪移参考:https://github.com/shadowsocks/shadowsocks/wiki/Setup-a-Shadowsocks-relay sudo su
echo 1 > /proc/sys/net/ipv4/ip_forward
iptables -t nat -A PREROUTING -p tcp --dport 8388 -j DNAT --to-destination US_VPS_IP:8388
iptables -t nat -A POSTROUTING -p tcp -d US_VPS_IP --dport 8388 -j SNAT --to-source JAPAN_VPS_IP 备份/恢复iptables设置参考:https://upcloud.com/community/tutorials/configure-iptables-centos/ sudo su
iptables-save > /etc/iptables-rules
iptables-restore < /etc/iptables-rules |
Mac 安装Shadowsocks算法依赖libsodium依赖默认Homebrew安装 参考:https://bin.zmide.com/?p=408 wget https://github.com/jedisct1/libsodium/releases/download/1.0.18-RELEASE/libsodium-1.0.18.tar.gz
tar xzvf libsodium*.tar.gz
cd libsodium*
./configure
make -j8 && make install
pip install https://github.com/shadowsocks/shadowsocks/archive/master.zip --user 更好的方法是homebrew# 在外网的环境下安装(需要代理)
# ...
$ brew install shadowsocks-libev |
❖ 进入IRC的世界
为什么要用IRC? GUI版和网页版的IRC客户端就不多说了。这里说说命令行里的客户端。 目前最流行都CLI版本IRC客户端是这两个: 这里我们讲 Irssi: 命令行版的IRC Client客户端安装: # Mac
brew install irssi
# Ubuntu
apt install irssi 命令行输入 和一般Linux程序的一般命令、格式都不同,IRC客户端一般有自己的命令。 下方 一般命令(不区分大小写):
尝试一下完整流程:
常用快捷键:
配置IRSSI如果想长期保存、备份一个固定的程序配置,那么就需要修改配置文件。 配置中,会在第一次运行时就自动设置了一些,包括根据当前电脑账户的用户名设置 配置中包含的常用内容:
界面美化的设置:
常用服务器列表首先要区分一些概念:
全球常用的服务器,就那么几个:
配置案例:
配置完每个服务器后,相应的还要配置
常用频道列表IRC的频道不是用URL之类很复杂的东西,全都是用 配置案例:
注册流程一般大一点的服务器,都是必须要注册的,流程比较麻烦。以往传说里的各种匿名聊天,再也没有了。不注册,就不让你connect服务器。 每个大服务器的流程都不一样,一般是要跟服务器管家机器人
验证成功后,就会出现 下次再登录,只需要每次在connect服务器后输入这个命令即可登录:
但是每次登录都这样输命令太麻烦。在配置文件里面我们可以在chatnet中配置登录后自动执行这个命令:
如果用的是手机客户端或GUI客户端的话,一般设置里面都有自动登录的用户名密码选项,效果是一样的。 TMUX颜色问题如果在Tmux里运行,那么有可能会显示这个错误:
根据提示在 export TERM="tmux-256color" 发现zsh找不到这个color,而且无法启动程序。 色彩主题目前IRSSI的世界里,唯一知名的主题只有 按照方法很简单,clone整个项目,把内容全部复制到 但是这个主题需要自己进入客户端后,手动输入命令加载script脚本才能生效: 当然,官方有更方便的方法,进入客户端后自动加载指定的脚本,只要在 mkdir ~/.irssi/scripts/autorun/
cp ~/.irssi/scripts/awl.pl ~/.irssi/scripts/autorun/ 然后再次打开irssi就会看到更现代化的主题了。 |
多台路由器组成WDS无线桥接 [DRAFT]背景:家里有一台主路由器放在大厅用来连接外网。另外多出来几台老路由器,还有几台老台式机,上面配有Linux系统作为服务器,想做到把台式机放在别的房间,再用老路由器通过网线连接把服务器连接到主网络里。然后要求能够在同一网段,可以ssh或远程桌面访问。 路由器组网有几种模式:
无线中继设置很方便,几乎所有路由器都能支持。但是这只能做到副路由器能够正常访问外网,没法做到局域网内互通,因为网段不一样。 下面介绍几种家里的副路由器设置方法。 开始之前需要说明的是,
极路由器1代 作为副路由花了最长的时间研究、尝试,结果没成功。 TP-Link WR847N v2 作为副路由花了很长时间不断尝试、重启,结果没成功。 参考标准的官方WDS文档,说的非常简单明了: 华为HG255D作为副路由这个著名的华为HG255D,是从淘宝买的二手,花了30块钱。知名是因为它是这个价位可以装OpenWRT的很好选择。 Mercury MW305R 水星作为副路由为了组WDS网,特意在淘宝上买了一个崭新的Mercury路由,49块钱,没想到设置WDS如此轻松,没看教程,全程只用了十几分钟。
|
Ubuntu 部署Samba文件共享服务器Refer to: https://ubuntu.com/tutorials/install-and-configure-samba#1-overview sudo apt install samba -y
mkdir ~/sambashare/
sudo echo [sambashare] >> /etc/samba/smb.conf
sudo echo comment = Samba on Ubuntu >> /etc/samba/smb.conf
sudo echo path = /home/solnas/sambashare >> /etc/samba/smb.conf
sudo echo read only = no >> /etc/samba/smb.conf
sudo echo browsable = yes >> /etc/samba/smb.conf
sudo service smbd restart
sudo smbpasswd -a solnas |
日常的网络问题层出不穷,实在太多有点记忆不够用,在这里开一篇再好不过,随时查阅。
另外,基础的网络学习也一起放在这吧
涉及问题
The text was updated successfully, but these errors were encountered: