title: Linux网络管理
date: 2018-12-15 11:15:55
tags:
- 基础
- 网络
categories:
- Linux
💠
💠 2025-05-09 14:24:14
ip_local_port_range Linux increase ip_local_port_range TCP port range
iftop
流量监控
来自 dnsutils 包
快速使用 nslookup jd.com 223.5.5.5
nslookup - 8.8.8.8
进入 REPL 方便调试, 8.8.8.8 是Google开放的DNS 备选 8.8.4.4
上连DNS的IP#端口
通常是53比 nslookup 更强大 Domain Information Groper
快速使用 dig @8.8.8.8 www.baidu.com
dig [option] @8.8.8.8 www.baidu.com
dog
类似dig
/etc/resolv.conf
中添加Google的DNS (阿里云 DNS 223.5.5.5 223.6.6.6) nameserver 8.8.8.8
nameserver 8.8.8.4
刷新本地缓存
Linux-router
Linux作为路由器
显示网络数据包传输到指定主机的路径信息,追踪数据传输路由状况
traceroute [选项] [远程主机名或IP地址] [数据包大小]
traceroute -I stackoverflow.com
icmp 查看路由表NTrace-core
可视化
IPv6
网桥, 通常使用 bridge-utils 的 brctl 进行管理
增加
删除
配置开机启动
一个socket的五个必要元素: client_ip:client_port<----->server_ip:server_port + 协议
/etc/sysctl.conf
动态端口范围: net.ipv4.ip_local_port_range=32788 60000 修改时不能超过[1024,65535]范围
强制关闭tcp连接: killcx tcpkill
iperf3
: TCP UDP 测速, 在两个节点上使用iperf启动服务端和客户端进程,从而计算TCP和UDP指标信息 Ethr Golang 仿写
netstat lsof fuser
lsof -i:端口号
用于查看某一端口的占用情况,缺省端口号显示全部
cat /etc/services
查看系统以及使用的端口查询占用端口 fuser -v -n tcp 22
或者 fuser -v 22/tcp
fuser中含三种协议: file 默认, tcp, udp
fuser -v -n tcp 0
whatportis 可以通过服务查询默认端口,或者是通过端口查询默认服务的工具
tcpdump -i eth0 -nn -X 'port 53' -c 1
root用户才有运行权限
列出可以选择的抓包对象 tcpdump -D
(USB设备也能抓?)
参考书籍 《Linux 大棚命令百篇》
inetutils-ping ICMP protocol
测试tcp连接延迟
Traffic Control
限速 tc qdisc add dev eno1 root tbf rate 400kbit latency 1ms burst 1000
解除 tc qdisc del dev eno1 root tbf rate 400kbit latency 1ms burst 1000
网卡100%丢包 tc qdisc add dev enp3s0 root netem loss 100%
移除限制: add 换成 del
移除指定网卡添加的所有规则 tc qdisc del dev enp3s0 root
指定IP网段 丢包
#! /bin/sh
interface=enp3s0
ip=192.168.16.0/24
delay=30ms
loss=90%
tc qdisc add dev $interface root handle 1: prio
# 此命令立即创建了类: 1:1, 1:2, 1:3 ( 缺省三个子类 )
tc filter add dev $interface parent 1:0 protocol ip prio 1 u32 match ip dst $ip flowid 2:1
# 在 1:1 节点添加一个过滤规则 , 优先权 1: 凡是去往目的地址是 $ip( 精确匹配 ) 的 IP 数据包 , 发送到频道 2:1.
tc qdisc add dev $interface parent 1:1 handle 2: netem delay $delay loss $loss
相关 iproute2
netstat -tunlp | grep 端口号
用于查看指定的端口号的进程情况
参数
-p
显示建立相关连接的程序名和PID 需要root
-a
显示本机所有连接和监听端口-n
以网络IP地址的形式显示当前建立的有效连接和端口-r
显示路由表信息-s
显示协议的统计信息。-v
显示当前的有效连接-t
显示所有的TCP协议连接情况-u
显示所有的UDP协议连接情况-c<秒数>
后面跟的秒数,表示每个几秒就刷新一次显示-i
显示自动配置接口的状态-l
仅显示连接状态为“LISTEN”的服务的网络状态netstat -an|awk '/tcp/ {print $6}'|sort|uniq -c| sort -hr
查看TCP状态和数量
代替 netstat ifconfig 的强大工具 基于iproute命令集配置Linux网络
用途 | net-tool | iproute2 |
---|---|---|
地址和链路配置 | ifconfig | ip addr/link |
路由表 | route | ip route |
ARP表 | arp | ip neigh |
VLAN | vconfig | ip link |
隧道 | iptunnel | ip tunnel |
组播 | ipmaddr | ip maddr |
统计 | netstat | ss |
net-tools 和 iproute 对应关系
作用 | net-tools用法 | iproute2用法 |
---|---|---|
展示本机所有网络接口 | ifconfig | ip link |
开启/停止某个网络接口 | ifconfig ech0 up/down | ip link set eth0 up/down |
给网络接口设置/删除IP | ipconfig eth0 10.0.0.0.1/24 / ifconfig eth0 0 | ip addr add/del 10.0.0.1/24 dev eth0 |
显示某个网络接口的IP | ifconfig eth0 | ip addr show dev eth0 |
显示路由表 | route -n | ip route show |
添加删除默认网关 | route add/del default gw 192.168.1.2 eth0 | ip route add/del via 192.168.1.2 eth0 ip route replace default via 192.168.1.2 dev eth0 |
添加ARP | arp -s 192.168.1.100 00:0c:29:c5:5a:ed | ip neigh add 192.168.1.100 lladdr 00:0c:29:c5:5a:ed dev eth0 |
删除ARP | arp -d 192.168.1.100 | ip neigh del 192.168.1.100 dev eth0 |
展示套接字状态 | netstat -l | ss -l |
默认网关: 如果主机找不到转发规则, 就把数据包发给默认的网关(家用网络一般是路由器的ip)
增加/删除一条路由规则 ip route add/del 192.168.2.0/24 via 192.168.1.254
设置网卡 eno1 MAC 地址ip link set eno1 address b4:xx:xx
关闭 启用 ifconfig name down/up
修改IP ifconfig eth0 192.168.1.200/24
iproute-ss
ss -s
ss -l
ss -pl
ss -a
这是VPN的技术理论基础
ss -at '( dport = :3308 )'
按主机扫描端口
主机扫描
无参数扫描默认添加-sS参数
进阶用法
使用环境
按端口扫描
masscan
Zmap 在千兆网卡状态下,45 分钟内扫描全网络 IPv4 地址
sudo apt install netcat
监听端口 nc -l 11044
nc 127.0.0.1 11044
任一方退出 netcat 就终止了该连接端口扫描 nc -z -v -n -w 2 127.0.0.1 20-33
扫描22-33端口
连接开放的端口 nc -v host port
传输文件
nc -v -l -p port < temp_out.md
nc -v -n host port > temp_in.md
< >
互换即可传输文件夹
tar -cvPf - /root/book/ | nc -l 12345
nc -n host port | tar -xvPf -
gzip -czvPf -xzvPf
scp命令用于在Linux下进行远程拷贝文件的命令,和它类似的命令有cp,认证用的是ssh 所以也能使用sshpass
-1:使用ssh协议版本1;
-2:使用ssh协议版本2;
-4:使用ipv4;
-6:使用ipv6;
-B:以批处理模式运行;
-C:使用压缩;
-F:指定ssh配置文件;
-l:指定宽带限制;
-o:指定使用的ssh选项;
-i: 指定私钥文件
-P:指定远程主机的端口号;
-p:保留文件的最后修改时间,最后访问时间和权限模式;
-q:不显示复制进度;
-r:以递归方式复制。
scp root@10.10.10.10:/opt/soft/nginx-0.5.38.tar.gz /opt/soft/
scp /opt/soft/nginx-0.5.38.tar.gz root@10.10.10.10:/opt/soft/scptest
注: scp rcp wget rsync 几种传输文件的方式
同步命令 (个人倾向于本地和远程, 书上称为源端和目的端) 命令参数详解 | 本地和VPS0之间同步数据
同步到 rsync file user@host:path
上, 是将这里的file文件覆盖远程的目录下的file文件,不像git那样
quick check策略
。使用后:让修改时间也同步,如果修改时间一致,就不同步(它不考虑文件内容,这是个坑)。上面的I策略
的-H
只要文件不一样,就会触发同步,该命令确保远程的是和本地的一致,本地的直接覆盖远程的
只要rsync命令对本地有读权限,对远程有写权限,就能确保目录是一致的
rsync只能以登录远程的账号来创建文件,它不可能将文件的组信息,用户信息也一致,除非是root用户可以做到
【其他特别参数】
--delete
如果本地没有该文件 远程就会删掉
--delete-exclude
删除远程指定的文件--delete-after
默认是先清理远程文件再同步,使用该选项就相反了先同步再删除需要删除文件mkdir blackdir && rsync -a --delete blackdir/ test/
删除目录内大量小文件时相较rm速度更快--exclude
排除掉某些文件不同步 可以使用多次
--excule-from
如果要排除的文件很多,可以将文件名放在一个文本文件里,然后使用该选项读取该文件--partial
断点续传 可以简写-P
--progress
显示传输进度信息
curl -s -o /dev/null URL
curl -i -H "Content-Type:application/json" -u admin:secret -X POST --data '{"title":"1","content":"1"}' http://tomcat.kcp/email/content
curl -v --cookie "USER_TOKEN=Yes" http://127.0.0.1:5000/
-x, --proxy [protocol://]host[:port]
-H "xxx:xxx"
例如 -H "Content-Type:application/json" -H "token:xxx"
-d '{"title":"1","content":"1"}'
-d '@data.json'
curl -X POST -H "Content-Type: multipart/form-data" -F "file=@index.html" URL
特性和优势:支持 HTTP HTTPS FTP协议
- 能够跟踪 HTML 和 XHTML 即可以下载整站,但是注意wget会不停的去下载HTML中的外链,无休无止
- 遵守 robots.txt 标准的工具
- 支持慢速网路和不稳定的下载,当下载失败就会不断重试,直到下载成功
- 支持断点续传
wget 配置文件 /etc/wgetrc
~/.wgetrc
两个文件配置(区别是全局和当前用户)wget的默认行为
例如 -X配置:wget -X js,css URL
排除两个文件夹不下载
.wgetrc
文件里配置 exclude_directories=js,css
wget -X '' -X js,css URL
-X
,两个配置文件。这三者的配置,wget是取并集的, 使用了-X ''
后就只看后面的-X 参数
参数:
目录下载 -r
递归选项
后台下载 --background
即使 你Ctrl D/exit也不会中断执行
-o
指定日志输出。默认当前目录的 wget-log
--content-disposition
支持HTTP Content-Disposition标头,通常包含文件名信息
-O
将下载的所有文件的内容追加到指定的文件
-c
断点续传 但是有潜在问题, 例如当源站的文件头部分或者已下载部分修改了,但wget只从上次下载的进度开始继续下载
避开robots.txt 协议 --execute robots=off
简化wget获取到的文件
-r
: URL:a/b/c/-r
再用上 --cut-dirs=1
: URL:/b/c/-r
再用上 -nH
:a/b/c/-r
再用上 -nH --cut-dirs=1
: /b/c/-r
再用上 -nH --cut-dirs=2
: /c/平铺,不使用源站的目录结构: -nd
若有重名文件,自动重命名
强制多层次文件夹 -x
例如:github.com/a/b/ --> github/com/a/b/
协议命名的根文件夹 --protocol-directories
例如 ftp://baidu.com/a/b/
自动重试 --tries=number
设置下载失败后重试的次数
拒绝重复下载同名文件,即使这个文件不是最新的 -nc
, wget会先比较时间戳,然后下载,且多次下载同名文件会自动添加 .1 .2 这样的后缀
自动分析是否下载同名文件, -N
会考虑时间戳以及文件大小,但是不能和 -nc 同时设置
限速 --limit-rate=N
默认单位是b,可以指定单位 k m
限制频率 -w 即 --wait=seconds
可以指定 m h d 等单位,效果是每两个请求间隔指定时间
请求重试 --waitretry
设置请求重试的秒数, 如果设置的是10秒, 第一次失败后就会等1s,然后第二次失败就等2s...直到递增到10s,然后结束
镜像整站 wget --mirror -p --convert-links -P . URL
-P .
: 保存所有文件和目录 到当前目录镜像SPA等使用了前端动态路由的网站 wget --mirror -w 2 -p --html-extension --tries=3 -k -P stackperl.html "https://docs.egret.com/uieditor/docs/api/eui/eui.AddItems"
获取API返回数据 wget -q url -O -
############ 证书颁发机构
# CA机构私钥
openssl genrsa -out ca.key 2048
# CA证书
openssl req -x509 -new -key ca.key -out ca.crt
############ 服务端
# 生成服务端私钥
openssl genrsa -out server.key 2048
# 生成服务端证书请求文件
openssl req -new -key server.key -out server.csr
# 使用CA证书生成服务端证书 关于sha256,默认使用的是sha1,在新版本的chrome中会被认为是不安全的,因为使用了过时的加密算法。
openssl x509 -req -sha256 -in server.csr -CA ca.crt -CAkey ca.key -CAcreateserial -days 3650 -out server.crt
# 打包服务端的资料为pkcs12格式(非必要,只是换一种格式存储上一步生成的证书) 生成过程中,需要创建访问密码,请记录下来。
openssl pkcs12 -export -in server.crt -inkey server.key -out server.pkcs12
Manjaro 导入自定义证书
sudo trust anchor --store my-root.crt sudo update-ca-trust
postfix和devecot
Manjaro 中 ftp 命令来自 inetutils 包
ftpserver
Golang
sudo apt-get install vsftpd -y
sudo systemctl start vsftpd.service
sudo useradd -d /home/uftp -s /bin/bash uftp
sudo passwd uftp
sudo rm /etc/pam.d/vsftpd
sudo usermod -s /sbin/nologin
uftpsudo chmod a+w /etc/vsftpd.conf
/etc/vsftpd.conf
# 限制用户对主目录以外目录访问
chroot_local_user=YES
# 指定一个 userlist 存放允许访问 ftp 的用户列表
userlist_deny=NO
userlist_enable=YES
# 记录允许访问 ftp 用户列表
userlist_file=/etc/vsftpd.user_list
# 不配置可能导致莫名的530问题
seccomp_sandbox=NO
# 允许文件上传
write_enable=YES
# 使用utf8编码
utf8_filesystem=YES
sudo chmod a+w /etc/vsftpd.user_list
uftp
sudo chmod a-w /home/common
mkdir /home/common/public && sudo chmod 777 -R /home/common/public
sudo systemctl restart vsftpd.service
$ sudo mkdir /home/common
$ sudo touch /home/common/welcome.txt
$ sudo useradd -d /home/common -s /bin/bash common
$ sudo passwd common
$ sudo rm /etc/pam.d/vsftpd
$ sudo usermod -s /sbin/nologin common
$ sudo chmod a+w /etc/vsftpd.conf
$ sudo vim /etc/vsftpd.conf
$ sudo vim /etc/vsftpd.user_list
$ sudo chmod a-w /home/common
$ sudo mkdir /home/common/public && sudo chmod 777 -R /home/common/public
$ sudo systemctl restart vsftpd.service
telnet ip port
如果端口开放则提示 Connected, 否则会提示 refused
nc -v -z -n ip port
TUN TAP 区别
TUN
TAP
服务端
sudo pip install shadowsocks
sudo ssserver -p 443 -k sd -m aes-256-cfb
sudo ssserver -p 443 -k sd -m aes-256-cfb --user nobodu -d start
sudo ssserver -d stop
sudo less /var/log/shadowsocks.log
客户端
sudo vim /etc/ss.json
{
"server":"127.0.0.1",
"server_port":443,
"localport":1080,
"password":"password",
"timeout":600,
"method":"aes-256-cfb"
}
sslocal -c /etc/ss/json
以下文件都在同一目录下
connect.ovpn
client
dev tun
proto tcp
remote IP PORT # 服务端IP地址映射的公网IP地址 端口
resolv-retry infinite
nobind
persist-key
persist-tun
ca ca.crt # ca 文件
auth-user-pass # 可选 password 文件
comp-lzo
verb 3
passwd
用户名
密码
ERROR: Cannot open TUN/TAP dev /dev/net/tun: No such device
openfortivpn 对应于 fortinet.com 的开源版本
yay openfortivpn
forticlient-vpn
GUI配置完,不像Windows平台会提示导入证书,只有无尽的连接中。。sudo sed -i '1 i\nameserver x.x.x.x' /etc/resolv.conf
注意 dns的ip会从运行中的输出 ns 部分eirture/tcp-proxy: A TCP proxy command line tool, written in Golang
gruf/tcpee: simple multi-threaded TCP proxy in Go - Codeberg.org
注意proxy-proto设置为false可正常使用
[example-name]
server-timeout = "300s"
client-timeout = "300s"
server-keepalive = "150s"
client-keepalive = "150s"
proxy = [
"0.0.0.0:9868 -> 192.168.56.10:3306"
]
# Enable writing of v1 compatible
# proxy protocol headers
proxy-proto = false
sudo pacman -S community/proxychains-ng # Arch
sudo apt install proxychains # apt
/etc/proxychains.conf
[ProxyList]
# add proxy here ...
# meanwile
# defaults set to "tor"
# socks4 127.0.0.1 9050
# socks5 127.0.0.1 1080
http 127.0.0.1 7890
其主要配置文件为:
/etc/sysconfig/iptables
查看配置情况 iptables -L -n
开启/屏蔽 端口 iptables -A INPUT -p tcp --dport 8000 -j ACCEPT
问题场景
可实现场景:公网内服务器访问内网A域名(Nginx配置)。
实现方案为公网服务器追加A域名的DNS到内网出口机的公网ip,出口机配置任意端口转发并修改上层应用层的请求头从而实现Nginx无感差异的访问(Nginx能正常匹配路由)
Virtual Network Computing
服务端安装 x11vnc
设置密码 x11vnc -storepasswd
使用密码启动 x11vnc -auth guess -once -loop -noxdamage -repeat -rfbauth ~/.vnc/passwd -rfbport 5900 -shared
-geometry 1280×1024
客户端 vnc-viewer(任意) 输入 ip 即可连接
noVNC
VNC client web application
Вы можете оставить комментарий после Вход в систему
Неприемлемый контент может быть отображен здесь и не будет показан на странице. Вы можете проверить и изменить его с помощью соответствующей функции редактирования.
Если вы подтверждаете, что содержание не содержит непристойной лексики/перенаправления на рекламу/насилия/вульгарной порнографии/нарушений/пиратства/ложного/незначительного или незаконного контента, связанного с национальными законами и предписаниями, вы можете нажать «Отправить» для подачи апелляции, и мы обработаем ее как можно скорее.
Опубликовать ( 0 )