dnsmasq config 配置

‘dnsmasq config 配置’ DNSmasq是一个小巧且方便地用于配置DNS和DHCP的工具,适用于小型网络。它提供了DNS功能和可选择的DHCP功能可以取代dhcpd(DHCPD服务配置)和bind等服务,配置起来更简单,更适用于虚拟化和大数据环境的部署。 检查一下no-hosts前面是不是已经有了#号,默认的情况下是有的,dnsmasq 会首先寻找本地的 hosts 文件再去寻找缓存下来的域名, 最后去上游dns 服务器寻找。 install ubuntu apt install dnsmasq docker docker run \ --name dnsmasq \ -d \ -p 30053:53/udp \ -p 35380:8080 \ -v dnsmasq-config:/etc/dnsmasq.conf \ --log-opt "max-size=100m" \ -e "HTTP_USER=foo" \ -e "HTTP_PASS=bar" \ --restart always \ jpillora/dnsmasq docker run \ -d \ --name dnsmasq \ --cap-add=NET_ADMIN \ -p 53:53/udp \ -v /etc/localtime:/etc/localtime:ro \ -v dnsmasq-config:/etc/dnsmasq.d \ --restart=always \ andyshinn/dnsmasq mkdir /etc/dnsmasq.d echo 'conf-dir=/etc/dnsmasq.d' >> /etc/dnsmasq.conf http://debugo.com/dnsmasq/ dhcp服务 其中一些关键的配置如下,配置文件/etc/dnsmasq.conf 中的注释已经给出了非常详细的解释。 vim /etc/dnsmasq.conf # 配置上游服务器地址 # resolv-file配置Dnsmasq额外的上游的DNS服务器,如果不开启就使用Linux主机默认的/etc/resolv.conf里的nameserver。 # 通过下面的选项指定其他文件来管理上游的DNS服务器 resolv-file=/etc/resolv.dnsmasq.conf # 服务监听的网络接口地址 # If you want dnsmasq to listen for DHCP and DNS requests only on # specified interfaces (and the loopback) give the name of the # interface (eg eth0) here. # Repeat the line for more than one interface. #interface= # Or you can specify which interface _not_ to listen on #except-interface= # Or which to listen on by address (remember to include 127.0.0.1 if # you use this.) listen-address=192.168.97.1,127.0.0.1 # dhcp动态分配的地址范围 # Uncomment this to enable the integrated DHCP server, you need # to supply the range of addresses available for lease and optionally a lease time dhcp-range=192.168.97.10,192.168.97.20,48h # dhcp服务的静态绑定 # Always set the name and ipaddr of the host with hardware address # dhcp-host=00:0C:29:5E:F2:6F,192.168.1.201 # dhcp-host=00:0C:29:5E:F2:6F,192.168.1.201,infinite 无限租期 dhcp-host=00:0C:29:5E:F2:6F,192.168.97.201,os02 dhcp-host=00:0C:29:15:63:CF,192.168.97.202,os03 vim /etc/resolv.dnsmasq.conf nameserver 223.5.5.5 nameserver 223.6.6.6 DNSMasq支持泛域名,比如在hosts中需要配2000条 apple app store ...

2018-09-07 · 2 min · 324 words · -

FQDN

FQDN https://blog.csdn.net/u012842205/article/details/51931017 FQDN 是完全合格域名/全程域名缩写, Fully Qualified Domain Name, 即是域名, 访问时将由 DNS 进行解析, 得到IP。 FQDN = Hostname + DomainName 当我们申请了一个域名时, 就可以使用这个域名来得到 IP,但若这个域名下挂在很多主机如何? 我是不是得申请很多很多域名给每个主机? 不需要, 域名即创建了一个域, 就如命名空间, 在这个命名空间下, 其他主机都可以创建自己的名称。这个名称就是通过以上公式得来。 举个例子, 一个公司申请了域名 comp.com, 这时候有一台主机名为 web, 则可以使用 web.comp.com 得到这个主机IP。 若还有两台提供邮件和 OA 服务的主机 cmail,oa,则这时候可以用以下 FQDN: cmail.comp.com oa.comp.com 类似例子也在安装 linux 系统时, 很多时候我们安装 Ubuntu, Debian 或 Kali 时, 会需要你填写一个域, 这个域即是你自己的, 只是没有注册,且只能在本地网络使用。 Linux 下查看方式: hostname, 查看主机名 hostname -f 查看 FQDN dnsdomainname 查看域 uname -h 查看主机名 注: 主机名作为一个网络节点的标示。

2018-07-03 · 1 min · 69 words · -

iptables 调试, raw表, LOG

iptables调试, raw表, LOG 启用iptables的日志 iptables -t nat -A POSTROUTING -p icmp -s 192.168.50.215 -j LOG --log-prefix 'iptable-log: ' iptables -t nat -I PREROUTING -p tcp -s 192.168.50.115 --dport 80 -j LOG --log-prefix 'iptable-log: ' # 配置日志级别 iptables -t raw -I OUTPUT -d 10.254.51.153 -j LOG --log-level 7 --log-prefix "raw out: " raw 表使用 PREROUTING 和 OUTPUT 两个链, 因此 raw 可以覆盖所有包。在raw表中支持一个特殊的目标:TRACE,使内核记录下每条匹配该包的对应iptables规则信息。使用raw表内的TRACE target即可实现对iptables规则的跟踪调试。 配置 假设需要对ipv4的ICMP包进行跟踪调试,抓取所有流经本机的ICMP包 iptables -t raw -A OUTPUT -p icmp -j TRACE iptables -t raw -A PREROUTING -p icmp -j TRACE 加载对应内核模块 ...

2018-04-09 · 3 min · 623 words · -

iproute2 basic

iproute2 basic commands # 查看 iproute 是否安装, 查看版本 ip -V ip link show type bridge install # ubuntu apt install iproute2 查看 IP 地址 # 显示所有网络地址 ip address show # 简写 ip addr # 再简写 ip a 设置网络接口的 IP 地址 # 为网络接口分配 IPv4 地址 # 使用这些命令配置网络接口的 IPv4 地址。 sudo ip addr add 10.0.0.1/24 dev eth1 ip addr add 192.168.53.0/24 dev wg0 删除网络接口的 IP 地址 ip addr del 192.168.53.0/24 dev wg0 # Delete all IPv4 addresses on interface wlp3s0 sudo ip -f inet addr del dev wlp3s0 # 查端口 ss, netstat ss -ntlp | grep ",1234," sudo ip link set down eth1 sudo ip link set up eth1 #查所有网卡的ip ip addr show #查看所有网卡 ip link show #查看某一个网卡的 ip ip addr show dev eth1 set link up or down # Bring a link up or down ip link set dev ${interface name} up ip link set eth0 up 设置网卡为混杂模式 ip link set enp1s0 promisc on ...

2018-03-25 · 3 min · 549 words · -

R7800 openwrt

R7800 openwrt 在ubuntu上安装如下软件包: gcc, g++, binutils, bzip2, flex, python, perl, make,find, grep, diff, unzip, gawk, getopt, subversion, libz-dev and libc 头文件 sudo apt-get updatesudo apt-get install gcc g++ build-essential subversion git-core libncurses5-dev zlib1g-dev gawk flex quilt libssl-dev xsltproc libxml-parser-perl mercurial bzr ecj cvs unzip 选择编译目标 make menuconfig Target System (Qualcomm Atheros IPQ806X) -> Target Profile (Netgear Nighthawk X4S R7800) -> 退出保存 编译固件 make V=s -j4 编译完成后 ubuntu:~/kunteng-lede$ ls bin/targets/ipq806x/generic/config.seed lede-ipq806x-R7800-squashfs-sysupgrade.tar lede-ipq806x-vmlinux.elflede-ipq806x-device-r7800.manifest ...

2018-03-22 · 1 min · 100 words · -

CIDR, IP 后面斜杠加数字

CIDR IP 后面斜杠加子网掩码 无类别域间路由(Classless Inter-Domain Routing、CIDR) 定义网段的几种方式 192.168.1.1/24 192.168.1.0/24 192.168.1.0/255.255.255.0 CIDR prefix CIDR prefix 是子网掩码(subnet mask)中 bit 是 1 的个数 例如: 255.255.255.0 的CIDR prefix是/24 255.255.255.0 => 11111111.11111111.11111111.0 http://blog.csdn.net/hzhsan/article/details/44100215 如: xx.xx.xx.2/24 xx.xx.xx.0/24 通俗一点就是, 斜杠后面的数字就表示子网掩码, 数字具体代表32位子网掩码 (二进制形式) 中前面的"1"的个数。 而且前面的"ip地址"也不一定是一个ip地址, 也可能是一个网络号 (末位是0) 。 通过后面数字可以将前面的网段进一步细划分成具体的子网。 所以 xx.xx.xx.2/24 ——>表示一个ip地址xx.xx.xx.2,24告诉了这个ip地址所对应的子网掩码。 xx.xx.xx.0/24 ——>表示一个网段,并且24告诉了当前具体的子网掩码。 其实这个就是用 CIDR 的形式表示的一个网段,或者说子网。 CIDR: 无类别域间路由选择,Classless and Subnet Address Extensions and Supernetting 我们知道确定一个子网需要知道主机地址和子网掩码,但用CIDR的形式,可以简单得到两个数值。举例说吧,192.168.0.0/24"就表示,这个网段的IP地址从192.168.0.1开始,到192.168.0.254结束 (192.168.0.0和192.168.0.255有特殊含义,不能用作IP地址) ;子网掩码是255.255.255.0。 上面的子网掩码怎么来的呢?其实关键就在"24"上。我们知道IP地址是四个十进制数组成的,相当于32位二进制。用CIDR表示形式,后一个数字将这32位进行了间隔 (以24为例) : 前24位用"1"表示,后面8位用0表示,得到一个二进制数: 11111111 11111111 11111111 00000000。将其转化为十进制,就是: 255.255.255.0了。 例如: 192.168.1.0/24 表示网段是192.168.1.0, 子网掩码是24位, 子网掩码为: 255.255.255.0, 用二进制表示为: 11111111 11111111 11111111 00000000 ,这里为什么是24呢,就是因为子网掩码里面的前面连续的"1"的个数为24个,一定要连续的才行。 ...

2018-02-27 · 1 min · 92 words · -

tftp

tftp default TFTP port 69. pacman -S tftp-hpa

2017-12-20 · 1 min · 8 words · -

网卡命名规则

网卡命名规则 Predictable Network Interface Names 可预测的网络接口命名 自从 v197 systemd/udev 开始,系统可以为本地的 Ethernet、WLAN和WWAN接口自动地分配可预测的、稳定的网络接口名称。该规范脱离了传统的命名机制(eth0,eth1,wlan0等),但是修复了许多问题。 原因 在传统的网络接口命名规则下,是由内核简单地从eth0开始为可被驱动探索到的设备分配名字(eht0,eth1…)。由于这些驱动不能够被现在技术所预测,意味着多个网络接口都可以被分配名为“eth0”、“eth1”这样的名字,这种方式存在一种隐患,就是一种接口可能是以“eth0”启动,但是结束时就变成了“eth1”.不可预测的命名规则存在着严重的安全威胁。 为了修复这个问题,许多方案被提出和实现。很长一段时间,udev都是根据Mac地址来分配永久了“ethX”名字。这导致了很多问题:这需要一个可写的但是通常不允许的root目录;由于系统的无边界性,当root一个OS镜像的时候可能会改变镜像的配置信息;许多系统的Mac地址并不是固定的。其中最大的问题是用户空间和系统内核对设备命名的冲突。 另一种解决方案就是“biosdevname”,该方案通过找到固件中固定的拓扑信息然后利用它们分配固定的接口。这个命名机制同/dev/*/by-path/ symlinks的方式很相似。大多数情况下,biosdevname 从底层的内核设备定位机制中分离了出来。 最后,许多观点迟滞根据用户选择的名字对接口重新命名,切断同Mac和物理位置的联系。这是一个非常好的选择,但是存在一个隐藏的问题就是用户获得了选择和分配这些名字的权利。 我们相信由“biosdevname”机制已领的泛化机制是一个很好的选择。基于固件、拓扑和位置信息分配固定的名字有一个巨大的优势,名字是全自动地、可预测的,即使硬件添加或删除也不影响。 V197添加了什么 systemd 197为许多命名策略新增了许多本地化的支持到 systemd/udevd 并实现了一个类似于“biosdevname”的机制。五种网络接口的命名机制通过udev得到了支持: 1、Names incorporating Firmware/BIOS provided index numbers for on-board devices (example: eno1) 2、Names incorporating Firmware/BIOS provided PCI Express hotplug slot index numbers (example: ens1) 3、Names incorporating physical/geographical location of the connector of the hardware (example: enp2s0) 4、Names incorporating the interfaces’s MAC address (example: enx78e7d1ea46da) 5、Classic, unpredictable kernel-native ethX naming (example: eth0) ...

2017-12-20 · 1 min · 90 words · -

DNS

DNS DNS 的本质是什么? Domain Name System = DNS (域名系统) 其实是一个数据库,是用于 TCP/IP 程序的分布式数据库,同时也是一种重要的网络协议。DNS储存了网络中的 IP 地址与对应主机的信息,邮件路由信息和其他网络应用方面的信息,用户通过询问解决库 (解决库发送询问并对DNS回应进行说明) 在 DNS 上查询信息。 DNS的作用是什么? DNS是网络分层里的应用层协议,事实上他是为其他应用层协议工作的,简单说就是把域名,或者说主机名转化为IP地址 (同时也提供反向域名查询的功能) ,类似字典,比如访问 www.baidu.com, 实际访问的是它的IP地址,因为机器识别的是拥有固定格式和含义的IP地址,而域名可以千奇百怪,甚至是中文,不利于识别。还有比如公司内部的域验证,通过分配给员工的域账号登录内网就必须通过DNS来找到域名权限服务器,来认证身份,故有些书上说: DNS是因特网世界里不可缺少的东西。 比如,使用host命令进行DNS查询 host命令用来做DNS查询。如果命令参数是域名,命令会输出关联的IP;如果命令参数是IP,命令则输出关联的域名。 http://www.cnblogs.com/kubixuesheng/p/6260195.html dnsmasq http://blog.wiloon.com/?p=8698&embed=true#?secret=4F3Jvk9nTk dns ttl https://jaminzhang.github.io/dns/DNS-TTL-Understanding-and-Config/ 我们有配置域名时,不同情况下,不同业务下,需要增大或减小 DNS TTL 值。这是为什么呢? 这需要我们重新理解下 DNS TTL 值的含义。 什么是域名的 TTL 值 TTL(Time-To-Live), 就是一条域名解析记录在 DNS 服务器中的存留时间。 当各地的 DNS 服务器接受到解析请求时, 就会向域名指定的 NS 服务器发出解析请求从而获得解析记录; 在获得这个记录之后, 记录会在 DNS 服务器中保存一段时间,这段时间内如果再接到这个域名的解析请求, DNS 服务器将不再向 NS 服务器发出请求, 而是直接返回刚才获得的记录; 而这个记录在 DNS 服务器上保留的时间,就是 TTL 值。 DNS记录中的 ttl 决定了信息的更新频率,如果 ttl 设置为0,每个请求都会发起DNS查询,显然这会造成性能问题,但是DNS的更新、改变延迟会相对非常低 ...

2017-12-17 · 3 min · 501 words · -

nmap, 网络 扫描

nmap, 网络 扫描 params -v verbose -p port install nmap apt install nmap 扫描一个网段 (使用 ping) nmap -sn xx.xx.xx.xx/24 nmap -sn 192.168.50.0/24 -sn, -sP: -sP 是 -sn 的别名, ping scan, nmap 发现主机之后不扫描端口, 直接返回 主机 IP 地址, (Ping扫描) 选项告诉 Nmap 仅仅 进行 ping 扫描 (主机发现), 然后打印出对扫描做出响应的那些主机。 没有进一步的测试 (如端口扫描或者操作系统探测)。 这比列表扫描更积极, 常常用于 和列表扫描相同的目的。它可以得到些许目标网络的信息而不被特别注意到。 对于管理员来说,了解多少主机正在运行比列表扫描提供的一列IP和主机名往往更有价值。 它可以很方便地得出网络上有多少机器正在运行或者监视服务器是否正常运行。 常常有人称它为 地毯式 ping, 它比ping广播地址更可靠,因为许多主机对广播请求不响应。-sP 选项在默认情况下, 发送一个ICMP 回声请求和一个TCP报文到80端口。 如果非特权用户执行,就发送一个SYN报文 (用connect()系统调用)到目标机的80端口。 当特权用户扫描局域网上的目标机时,会发送ARP请求(-PR), 除非使用了–send-ip选项。 -sP选项可以和除-P0)之外的任何发现探测类型-P* 选项结合使用以达到更大的灵活性。 一旦使用了任何探测类型和端口选项,默认的探测(ACK和回应请求)就被覆盖了。 当防守严密的防火墙位于运行Nmap的源主机和目标网络之间时, 推荐使用那些高级选项。否则,当防火墙捕获并丢弃探测包或者响应包时,一些主机就不能被探测到。 ...

2017-12-16 · 21 min · 4314 words · -

QUIC

QUIC 读作 “quick” QUIC (Quick UDP Internet Connection) Quic 是一个通用的基于UDP的传输层网络协议, 其目的是为了在网络层代替 TCP。 QUIC旨在提供几乎等同于TCP连接的可靠性,但延迟大大减少, 提供与TLS/SSL相当的安全性 QUIC 是 Google 制定的一种互联网传输层协议,它基于UDP传输层协议,同时兼具TCP、TLS、HTTP/2等协议的可靠性与安全性,可以有效减少连接与传输延迟,更好地应对当前传输层与应用层的挑战。目前阿里云 CDN 线上提供 QUIC 版本服务,已经有 Tbps 级别的流量承载,并对客户来带了显著的延迟收益。本文将由低向上分层讨论 QUIC 协议的特点。 QUIC协议在当前Chrome版本中被默认开启,活跃的会话可以用 chrome://net-export/ 导出, 再导入分析工具 https://netlog-viewer.appspot.com/ 查看。 HTTP/3就是基于QUIC协议的 chrome dev tool 里 “h3-29”表示是QUIC请求 目前常见的实现有Google的quiche,微软的msquic,mozilla的neqo,以及基于go语言的quic-go等。 什么是QUIC QUIC (Quick UDP Internet Connections)是一种实验性传输层网络协议,提供与TLS/SSL相当的安全性,同时具有更低的连接和传输延迟。QUIC基于UDP,因此拥有极佳的弱网性能,在丢包和网络延迟严重的情况下仍可提供可用的服务。QUIC在应用程序层面就能实现不同的拥塞控制算法,不需要操作系统和内核支持,这相比于传统的TCP协议,拥有了更好的改造灵活性,非常适合在TCP协议优化遇到瓶颈的业务。 Quic 相比现在广泛应用的 http2+tcp+tls 协议有如下优势: 减少了握手的延迟 (1-RTT 或 0-RTT), 连接创建期间大大减少开销, 减少了 TCP 三次握手及 TLS 握手时间。 改进的拥塞控制 – 拥塞控制移到了用户空间 在QUIC级别而不是UDP级别重传丢失的数据 避免队头阻塞的多路复用。 QUIC与HTTP/2的多路复用连接协同工作,允许多个数据流独立到达所有端点,因此不受涉及其他数据流的丢包影响。相反,HTTP/2创建在传输控制协议 (TCP)上,如果任何一个TCP数据包延迟或丢失,所有多路数据流都会遭受队头阻塞延迟。 连接迁移 (Connection Migration) QUIC包含一个连接标识符,该标识符唯一地标识客户端与服务器之间的连接,而无论源IP地址是什么。这样只需发送一个包含此ID的数据包即可重新创建连接,因为即使用户的IP地址发生变化,原始连接ID仍然有效。 QUIC连接未严格绑定到单个网络路径上。连接迁移使用连接标识符来允许连接转移到新的网络路径。在这个版本的QUIC中,只有客户端能够进行迁移。此设计还允许在网络拓扑或地址映射发生变化 (如NAT重新绑定可能引起的变化)后继续连接。 ...

2017-12-16 · 1 min · 161 words · -

TCP_NODELAY, TCP_CORK, Nagle

TCP_NODELAY, TCP_CORK, Nagle TCP/IP之 Nagle 算法与40ms延迟提到了Nagle 算法。这样虽然提高了网络吞吐量, 但是实时性却降低了, 在一些交互性很强的应用程序来说是不允许的, 使用 TCP_NODELAY 选项可以禁止 Nagle 算法。 禁止Nagle 后应用程序向内核递交的每个数据包都会立即发送出去。 但是禁止 Nagle, 网络传输仍然受到 TCP 确认延迟机制的影响。 TCP_CORK CORK 意思是塞子, TCP中的 CORK 意思是将连接塞住, 使得数据先不发出去, 等到拔去塞子后再发出去。 设置该选项后, 内核会尽力把小数据包拼接成一个大的数据包 (一个MTU) 再发送出去, 一定时间后, 内核仍然没有组合成一个 MTU 时也必须发送现有的数据。 然而, TCP_CORK 的实现可能并不像你想象的那么完美, CORK 并不会将连接完全塞住。内核其实并不知道应用层到底什么时候会发送第二批数据用于和第一批数据拼接以达到 MTU 的大小, 因此内核会给出一个时间限制, 在该时间内没有拼接成一个大包 (努力接近 MTU) 的话, 内核就会无条件发送。 也就是说若应用层程序发送小包数据的间隔不够短时, TCP_CORK 就没有一点作用, 反而失去了数据的实时性 (每个小包数据都会延时一定时间再发送,这个时间超过了内核的时间限制) 。 Nagle 算法和 CORK 算法非常类似, 但是它们的着眼点不一样, Nagle 算法主要避免网络因为太多的小包 (协议头的比例非常之大) 而拥塞, 而 CORK 算法则是为了提高网络的利用率,使得总体上协议头占用的比例尽可能的小。如此看来这二者在避免发送小包上是一致的,在用户控制的层面上,Nagle算法完全不受用户socket的控制,你只能简单的设置TCP_NODELAY而禁用它,CORK算法同样也是通过设置或者清除TCP_CORK使能或者禁用之,然而Nagle算法关心的是网络拥塞问题,只要所有的ACK回来则发包,而CORK算法却可以关心内容,在前后数据包发送间隔很短的前提下 (很重要,否则内核会帮你将分散的包发出) ,即使你是分散发送多个小数据包,你也可以通过使能CORK算法将这些内容拼接在一个包内,如果此时用Nagle算法的话,则可能做不到这一点。 Nagle 算法 根据创建者John Nagle命名。该算法用于对缓冲区内的一定数量的消息进行自动连接。该处理过程(称为 Nagling ), 通过减少必须发送的封包的数量, 提高了网络应用 程序系统的效率。Nagle算法, 由Ford Aerospace And Communications Corporation Congestion Control in IP/TCPinternetworks(IETF RFC 896)(1984)定义, 最初是用于缓冲 Ford 的私有 TCP/IP 网络拥塞情况, 不过被广泛传播开来。 ...

2017-09-21 · 2 min · 272 words · -

backup list, 备份列表

backup list, 备份列表 PC - home maven setting heidisql config fcitx 码表 /home/wiloon/.config/fcitx/table/*.mb jetbrain.dic ~/bin IDEA settings PC - work maven setting heidisql config email fcitx 码表 /home/wiloon/.config/fcitx/table/*.mb idea.dic ~/bin Emacs configuration file: ~/.emacs IDEA settings. wiloon.com enx.war enx db router /etc/hosts android 照片 > NAS Contacts

2017-07-30 · 1 min · 47 words · -

MTR/traceroute, 路由跟踪

MTR/traceroute, 路由跟踪 使用 MTR 诊断网络问题 MTR 是一款强大的网络诊断工具, 网络管理员使用 MTR 可以诊断和隔离网络问题,并且为上游 ISP 提供有用的网络状态报告。 MTR 是传统 traceroute 命令的进化版, 并且可以提供强大的数据样本, 因为他集合了 traceroute 和 ping 这两个命令的精华。本文带您深入了解 MTR, 从数据如何生成, 到如果正确理解报告样本并得出相应的结论。 关于网络诊断技术的基本理论请参考 network diagnostics. 如果您怀疑您的 Linux 系统有其他问题,请参考 system diagnostics 。最后,我们假定您已经掌握了 getting started guide (入门指南) 。 网络诊断相关的背景知识 网络诊断工具 例如 ping traceroute mtr 都使用的 “ICMP” 包来测试 Internet 两点之间的网络连接状况。当用户使用 ping 命令 ping 网络上的主机后, ICMP 包将会发送到目的主机,然后在目的主机返回响应。这样,就可以得知本机到目的主机 ICMP 包传输所使用的往返时间。 相对于其他命令仅仅收集传输路径或响应时间,MTR 工具会收集更多的信息,比如 连接状态,连接可用性,以及传输路径中主机的响应性。由于这些额外的信息,我们建议您尽可能完整的展现 Internet 两个主机之间的网络连接信息。接下来我们讲述如何安装 MTR 软件,以及如何看懂这款软件的输出结果。 安装 MTR # debian/ubuntu apt-get update apt-get upgrade apt-get install mtr-tiny # CentOS/Fedora yum update yum install mtr # Arch Linux pacman -Sy pacman -S mtr 使用 mtr 39.156.69.79 mtr -report google.com 如果您的本机使用的 Mac OS X 系统,可以使用 Homebre 或 MacPorts 来安装 MTR。使用 Homebrew 安装 MTR: ...

2017-02-17 · 8 min · 1659 words · -

openvpn

openvpn VPN, Virtual Private Network, 虚拟专用网络 OpenVPN 是一个基于 OpenSSL 库的应用层 VPN 实现, 最早由James Yonan编写 OpenVpn的技术核心是虚拟网卡,其次是SSL协议实现 虚拟网卡是使用网络底层编程技术实现的一个驱动软件,安装后在主机上多出现一个网卡,可以像其它网卡一样进行配置。服务程序可以在应用层打开虚拟网卡,如果应用软件 (如IE) 向虚拟网卡发送数据,则服务程序可以读取到该数据,如果服务程序写合适的数据到虚拟网卡,应用软件也可以接收得到。虚拟网卡在很多的操作系统下都有相应的实现,这也是OpenVpn能够跨平台一个很重要的理由. 在OpenVpn中,如果用户访问一个远程的虚拟地址 (属于虚拟网卡配用的地址系列,区别于真实地址) ,则操作系统会通过路由机制将数据包 (TUN模式) 或数据帧 (TAP模式) 发送到虚拟网卡上,服务程序接收该数据并进行相应的处理后,通过SOCKET从外网上发送出去,远程服务程序通过SOCKET从外网上接收数据,并进行相应的处理后,发送给虚拟网卡,则应用软件可以接收到,完成了一个单向传输的过程,反之亦然。 加密 OpenVPN使用OpenSSL库加密数据与控制信息: 它使用了OpenSSL的加密以及验证功能,意味着,它能够使用任何OpenSSL支持的算法。它提供了可选的数据包 HMAC 功能以提高连接的安全性。此外,OpenSSL的硬件加速也能提高它的性能。[1] 验证 OpenVPN提供了多种身份验证方式, 用以确认参与连接双方的身份,包括: 预享私钥,第三方证书以及用户名/密码组合。预享密钥最为简单,但同时它只能用于建立点对点的VPN;基于PKI的第三方证书提供了最完善的功能,但是需要额外的精力去维护一个PKI证书体系。 OpenVPN2.0后引入了用户名/口令组合的身份验证方式,它可以省略客户端证书,但是仍有一份服务器证书需要被用作加密。 网络 OpenVPN所有的通信都基于一个单一的IP端口,默认且推荐使用UDP协议通讯,同时TCP也被支持。OpenVPN连接能通过大多数的代理服务器,并且能够在NAT的环境中很好地工作。服务端具有向客户端"推送"某些网络配置信息的功能,这些信息包括: IP地址、路由设置等。OpenVPN提供了两种虚拟网络接口: 通用Tun/Tap驱动,通过它们,可以建立三层IP隧道,或者虚拟二层以太网,后者可以传送任何类型的二层以太网络数据。传送的数据可通过LZO算法压缩。IANA (Internet Assigned Numbers Authority) 指定给OpenVPN的官方端口为1194。OpenVPN 2.0以后版本每个进程可以同时管理数个并发的隧道。[1] OpenVPN使用通用网络协议 (TCP与UDP) 的特点使它成为 IPsec 等协议的理想替代,尤其是在ISP (Internet service provider) 过滤某些特定VPN协议的情况下。[1] 在选择协议时候,需要注意2个加密隧道之间的网络状况,如有高延迟或者丢包较多的情况下,请选择TCP协议作为底层协议,UDP协议由于存在无连接和重传机制,导致要隧道上层的协议进行重传,效率非常低下。[1] 安全 OpenVPN与生俱来便具备了许多安全特性: 它在用户空间运行,无须对内核及网络协议栈作修改;初始完毕后以chroot方式运行,放弃root权限;使用mlockall以防止敏感数据交换到磁盘。[1] OpenVPN通过PKCS#11支持硬件加密标识,如智能卡。 install #install sudo pacman -S openvpn apt-get install openvpn server create keys pacman -S easy-rsa use Elliptic curve instead of RSA # append line to /etc/easy-rsa/vars set_var EASYRSA_ALGO ec set_var EASYRSA_CURVE secp521r1 set_var EASYRSA_DIGEST "sha512" set_var EASYRSA_NS_SUPPORT "yes" easy-rsa cd /etc/easy-rsa export EASYRSA=$(pwd) export EASYRSA_VARS_FILE=/etc/easy-rsa/vars easyrsa init-pki easyrsa build-ca # new ca certificate file: /etc/easy-rsa/pki/ca.crt scp /etc/easy-rsa/pki/ca.crt foo@hostname-of-openvpn-server:/tmp/ca.crt mv /tmp/ca.crt /etc/openvpn/server/ chown root:openvpn /etc/openvpn/server/ca.crt # install easy-rsa on openvpn server pacman -S easy-rsa easyrsa init-pki easyrsa gen-req pingd nopass cp /etc/easy-rsa/pki/private/pingd.key /etc/openvpn/server/ openvpn --genkey secret /etc/openvpn/server/ta.key # The server and client(s) certificates need to be signed by the CA then transferred back to the OpenVPN server/client(s). cp /etc/easy-rsa/pki/reqs/*.req /tmp scp /tmp/*.req foo@hostname-of-CA:/tmp # on ca server cd /etc/easy-rsa easyrsa import-req /tmp/servername.req servername easyrsa sign-req server servername scp /etc/easy-rsa/pki/issued/*.crt foo@hostname-of-openvpn_server:/tmp mv /tmp/servername.crt /etc/openvpn/server/ chown root:openvpn /etc/openvpn/server/servername.crt client pacman -S easy-rsa use Elliptic curve instead of RSA ... easy-rsa cd /etc/easy-rsa export EASYRSA=$(pwd) export EASYRSA_VARS_FILE=/etc/easy-rsa/vars easyrsa init-pki easyrsa gen-req client1 nopass # sign the certificates cp /etc/easy-rsa/pki/reqs/*.req /tmp # cd /etc/easy-rsa # easyrsa import-req /tmp/servername.req servername # easyrsa import-req /tmp/client1.req client1 # easyrsa sign-req server servername # easyrsa sign-req client client1 config “#”前缀是指定的注释标签。openvpn网站上的示例广泛使用’#‘注释。另外,分号 ‘;’ 用于注释掉单行或单项。 ...

2017-02-17 · 3 min · 615 words · -

socks5 -> http/https proxy, privoxy/cow

‘socks5 -> http/https proxy, privoxy/cow’ curl -L git.io/cow | bash #edit /home/user0/.cow/rc listen = http://127.0.0.1:7777 proxy = socks5://127.0.0.1:1080 #config http/https proxy export http_proxy=http://127.0.0.1:7777 export https_proxy=http://127.0.0.1:7777 sudo pacman -S privoxy edit /etc/privoxy/config forward-socks5 / 127.0.0.1:1080 . listen-address 127.0.0.1:8118 sudo systemctl start privoxy proxychains ProxyChains是Linux和其他Unix下的代理工具。它可以使任何程序通过代理上网, 允许TCP和DNS通过代理隧道。ProxyChains通过一个用户定义的代理列表强制连接指定的应用程序, 直接断开接收方和发送方的连接。 ProxyChains是一个开源Unix/Linux代理工具,能够强制使任何应用的TCP连接使用SOCKS4,SOCKS或者HTTP(S)代理进行连接。 #Arch Linux sudo pacman -S proxychains-ng #Debian/Ubuntu apt-get install proxychains #Mac OS X brew install proxychains-ng # 用户级配置文件 ~/.proxychains/proxychains.conf # 系统级配置文件 vim /etc/proxychains.conf # content [ProxyList] socks5 192.168.50.205 1080 http 127.0.0.1 4321 proxychains looks for config file in following order: ...

2017-02-15 · 1 min · 190 words · -

mitmproxy

mitmproxy mitmproxy 是用 Python 和 C 开发的一个中间人代理软件 (man-in-the-middle proxy), 它可以用来拦截、修改、重放和保存 HTTP/HTTPS 请求。 它提供了两个命令行工具: mitmproxy 具备交互界面 mitmdump 不具备交互界面, 类似 tcpdump

2017-02-06 · 1 min · 19 words · -

traefik

traefik podman run -d \ --name traefik \ -p 80:80 \ -p 8080:8080 \ -v nginx-config:/etc/nginx \ -v nginx-www:/var/www \ -v cert:/etc/letsencrypt \ -v /etc/localtime:/etc/localtime:ro \ traefik:v2.9.6 dashboard http://192.168.50.51:8080/

2017-01-15 · 1 min · 29 words · -

tcp MTU MSS

tcp MTU MSS MTU: Maxitum Transmission Unit 最大传输单元 检测需要设置的合理的值: 大部分网络设备都是 1500。如果本机的 MTU 比网关的 MTU 大,大的数据包就会被拆开来传送,这样会产生很多数据包碎片,增加丢包率,降低网络速度。把本机的 MTU 设成比网关的 MTU 小或相同,就可以减少丢包 Linux OS 检测网络 MTU: ping -s 1472 -M do 172.21.0.118 含义: 发送大小包大小是 1472(+28)字节,禁止路由器拆分数据包。 【 1472 + 8(ICMP回显示请求和回显应答报文格式长度) + 20(IP首部) = 1500 】 回复结果: 如果正常回复,说明网络允许最大MTU就是1500字节,与系统默认相同,只需将自己的路由的MTU也设置为1500即可。 如果没正常回复,说明数据包大小超过了网络限定的MTU大小。需要减小探测包大小再次尝试。 有些系统或网络 可能会返回建议的 MTU, ping: local error: Message too long, mtu=1364, 在这个值 基础上 -28 就是需要设置的 MTU, ip link set dev ens32 mtu 1336 iproute2 change link MTU 临时修改 MTU 重启后失效 ...

2016-12-30 · 7 min · 1441 words · -

TCP 三次握手, tcp three way handshake, 四次挥手, TCP 状态 (SYN, FIN, ACK, PSH, RST, URG)

TCP 三次握手, tcp three way handshake, 四次挥手, TCP 状态 (SYN, FIN, ACK, PSH, RST, URG) TCP (Transmission Control Protocol) TCP 工作在网络OSI的七层模型中的第四层 - Transport层 TCP标志位 在TCP层,有个FLAGS字段,这个字段有以下几个标识: SYN, FIN, ACK, PSH, RST, URG. 其中,对于我们日常的分析有用的就是前面的五个字段。它们的含义是: SYN表示建立连接,SYN (synchronous) 是TCP/IP建立连接时使用的握手信号。 FIN表示关闭连接,FIN(Finish)—为1表示发送方没有数据要传输了,要求释放连接。 ACK表示响应,ACK (ACKnowledge Character) PSH表示有 DATA数据传输,(Push) RST表示连接重置。Reset重连位~ 当RST=1的时候通知重新建立TCP连接 URG: urgent 其中,ACK是可能与SYN,FIN等同时使用的,比如SYN和ACK可能同时为1,它表示的就是建立连接之后的响应, 如果只是单个的一个SYN,它表示的只是建立连接。 TCP的几次握手就是通过这样的ACK表现出来的。 但SYN与FIN是不会同时为1的,因为前者表示的是建立连接,而后者表示的是断开连接。 RST一般是在FIN之后才会出现为1的情况,表示的是连接重置。 一般地,当出现FIN包或RST包时,我们便认为客户端与服务器端断开了连接;而当出现SYN和SYN+ACK包时,我们认为客户端与服务器建立了一个连接。 PSH为1的情况,一般只出现在 DATA内容不为0的包中,也就是说PSH为1表示的是有真正的TCP数据包内容被传递。 TCP的连接建立和连接关闭,都是通过请求-响应的模式完成的。 TCP三次握手 TCP是主机对主机层的传输控制协议,提供可靠的连接服务,采用三次握手确认建立一个连接: 第一次握手: (A -> [SYN] -> B) 主机A发送位码为syn=1, seq=1234567(seq随机产生)的数据包到服务器,主机B由SYN=1知道,A要求建立联机;(seq:Sequence number),并进入SYN_SEND状态,等待服务器确认; 第二次握手: (B -> [SYN/ACK] -> A) 主机B收到请求后要确认联机信息,向A发送syn=1,ack=1234568(主机A的seq+1),seq=7654321(随机产生)的包;此时服务器进入SYN_RECV状态; ...

2016-08-10 · 2 min · 236 words · -