zl程序教程

您现在的位置是:首页 >  云平台

当前栏目

网络

2023-06-13 09:17:46 时间

路由 | 额外 IP | 更改 MAC 地址 | 端口 | 防火墙 | IP 转发 | NAT | DNS | DHCP | 通信量 | QoS | NIS

调试 (也可看流量分析) Linux
# ethtool eth0 # 显示以太网状态(replaces mii-diag)

# ethtool -s eth0 speed 100 duplex full # 把网卡 eth0 速度改为 100兆/秒,采用全双工

# ethtool -s eth0 autoneg off # 禁用自动协商模式

# ethtool -p eth1 # 闪烁网络接口 LED 灯 - 如果支持的话,非常实用

# ip link show # 在 Linux 上显示所有网络接口(同 ifconfig 类似)

# ip link set eth0 up # 使设备激活(或Down掉)。同 "ifconfig eth0 up"

# ip addr show # 在 Linux 上显示所有 IP 地址(与 ifconfig 类似)

# ip neigh show # 与 arp -a 类似

# ifconfig fxp0 # 查看 "media" 字段(FreeBSD)

# arp -a # 查看路由(或主机) ARP 条目(所有系统)

# ping cb.vu # 第一个要试的事情...

# traceroute cb.vu # 列印到目的地的路由路径

# ifconfig fxp0 media 100baseTX mediaopt full-duplex # 100兆/秒 全双工(FreeBSD)

# netstat -s # 对每个网络协议做系统级分析

另一些命令,虽然不总是默认安装,但很好找:

# arping 192.168.16.254 # 在网络层上 Ping

# tcptraceroute -f 5 cb.vu # 使用 tcp 替换 icmp 来跟踪,透过防火墙

列印路由表
# route -n # Linux 或使用 "ip route"

# netstat -rn # Linux, BSD 和 UNIX

# route print # Windows

添加删除路由 FreeBSD
# route add 212.117.0.0/16 192.168.1.1

# route delete 212.117.0.0/16

# route add default 192.168.1.1

永久的添加路由可在 /etc/rc.conf 配置文件中设置

static_routes="myroute"

route_myroute="-net 212.117.0.0/16 192.168.1.1"

Linux
# route add -net 192.168.20.0 netmask 255.255.255.0 gw 192.168.16.254

# ip route add 192.168.20.0/24 via 192.168.16.254 # 等同于上面命令

# route add -net 192.168.20.0 netmask 255.255.255.0 dev eth0

# route add default gw 192.168.51.254

# ip route add default via 192.168.51.254 dev eth0 # 等同于上面命令

# route delete -net 192.168.20.0 netmask 255.255.255.0

Solaris
# route add -net 192.168.20.0 -netmask 255.255.255.0 192.168.16.254

# route add default 192.168.51.254 1 # 1 = 通过此路由跳译注:数据包生存周期依赖于 IP 头中的生存周期(Time-to-Live,简称 TTL)。根据 RFC 的定义,这个域值由每个路由器来减少。接收到包的每台路由器根据路由该包所花费的秒数,将包中的这个域值减去相应的时间,或直接减 1。因为目前路由器转发包的时间基本小于 1 秒,这个域值基本上在源和目的地之间的没一跳便会减 1。数减 1

# route change default 192.168.50.254 1

永久条目配置在 /etc/defaultrouter 中。

Windows
# Route add 192.168.50.0 mask 255.255.255.0 192.168.51.253

# Route add 0.0.0.0 mask 0.0.0.0 192.168.51.254

使用 add -p 来是路由设置永久有效。

配置额外的 IP 地址 Linux
# ifconfig eth0 192.168.50.254 netmask 255.255.255.0 # 第一个 IP

# ifconfig eth0:0 192.168.51.254 netmask 255.255.255.0 # 第二个 IP

# ip addr add 192.168.50.254/24 dev eth0 # 等价命令

# ip addr add 192.168.51.254/24 dev eth0 label eth0:1

FreeBSD
# ifconfig fxp0 inet 192.168.50.254/24 # 第一个 IP

# ifconfig fxp0 alias 192.168.51.254 netmask 255.255.255.0 # 第二个 IP

永久条目设置在 /etc/rc.conf 中

ifconfig_fxp0="inet 192.168.50.254 netmask 255.255.255.0"

ifconfig_fxp0_alias0="192.168.51.254 netmask 255.255.255.0"

Solaris

用 ifconfig -a 命令检查设置

# ifconfig hme0 plumb # 启用网卡

# ifconfig hme0 192.168.50.254 netmask 255.255.255.0 up # 第一个 IP

# ifconfig hme0:1 192.168.51.254 netmask 255.255.255.0 up # 第二个 IP

更改 MAC 地址

通常在你更改之前先停下网络接口。不要告诉我为什么你想改变 MAC 地址

# ifconfig eth0 down

# ifconfig eth0 hw ether 00:01:02:03:04:05 # Linux

# ifconfig fxp0 link 00:01:02:03:04:05 # FreeBSD

# ifconfig hme0 ether 00:01:02:03:04:05 # Solaris

# sudo ifconfig en0 ether 00:01:02:03:04:05 # Mac OS X Tiger

# sudo ifconfig en0 lladdr 00:01:02:03:04:05 # Mac OS X Leopard

对于 Windows 已经有许多工具了。像 etherchangehttp://ntsecurity.nu/toolbox/etherchange。或者看看 Mac Makeup , smac 。

使用中的端口

监听打开的端口:

# netstat -an | grep LISTEN

# lsof -i # 列出所有因特网连接(Linux)

# socklist # 列出打开的 socket (Linux)

# sockstat -4 # 使用 socket 的应用程序列表(FreeBSD)

# netstat -anp --udp --tcp | grep LISTEN # Linux

# netstat -tup # 列出活跃的连接(Linux)

# netstat -tupl # 列出系统中正在监听的端口(Linux)

# netstat -ano # Windows

检查正在运行的防火墙(只是典型配置):

Linux
# iptables -L -n -v # 状态信息

Open the iptables firewall

# iptables -P INPUT ACCEPT # 打开所有

# iptables -P FORWARD ACCEPT

# iptables -P OUTPUT ACCEPT

# iptables -Z # 把所有链的包及字节的计数器清空

# iptables -F # 清空所有链

# iptables -X # 删除所有链译注:链必须没有被引用

FreeBSD
# ipfw show # 状态信息

# ipfw list 65535 # 如果显示 "65535 deny ip from any to any",那防火墙已被禁用

# sysctl net.inet.ip.fw.enable=0 # 禁用

# sysctl net.inet.ip.fw.enable=1 # 启用

路由 IP 转发 Linux

查看然后启用 IP 转发:

# cat /proc/sys/net/ipv4/ip_forward # 查看 IP 转发 0=禁用, 1=启用

# echo 1 > /proc/sys/net/ipv4/ip_forward

或者编辑 /etc/sysctl.conf:

net.ipv4.ip_forward = 1
FreeBSD

查看并启用:

# sysctl net.inet.ip.forwarding # 查看 IP 转发 0=禁用, 1=启用

# sysctl net.inet.ip.forwarding=1

# sysctl net.inet.ip.fastforwarding=1 # 专用路由器或防火墙

Permanent with entry in /etc/rc.conf:

gateway_enable="YES" # 如果主机是网关则设置为 YES。

Solaris
# ndd -set /dev/ip ip_forwarding 1 # 查看 IP 转发 0=禁用, 1=启用

NAT 网络地址转换 Linux
# iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE # 激活 NAT

# iptables -t nat -A PREROUTING -p tcp -d 78.31.70.238 --dport 20022 -j DNAT /

--to 192.168.16.44:22 # 转发端口 20022 到内部 IP 端口(ssh)

# iptables -t nat -A PREROUTING -p tcp -d 78.31.70.238 --dport 993:995 -j DNAT /

--to 192.168.16.254:993:995 # 转发 993-995 范围端口

# ip route flush cache

# iptables -L -t nat # 查看 NAT 状态信息

使用 -D 替换 -A 来删除端口转发。

FreeBSD
# natd -s -m -u -dynamic -f /etc/natd.conf -n fxp0

Or edit /etc/rc.conf with:

firewall_enable="YES" # 设置 YES 来启用防火墙功能

firewall_type="open" # 防火墙类型(看 /etc/rc.firewall)

natd_enable="YES" # 启用 natd (如果 firewall_enable == YES)。

natd_interface="tun0" # 公共的网络接口或要使用的 IP 地址。

natd_flags="-s -m -u -dynamic -f /etc/natd.conf"

端口转发:

# cat /etc/natd.conf 

same_ports yes

use_sockets yes

unregistered_only

# redirect_port tcp insideIP:2300-2399 3300-3399 # 端口范围

redirect_port udp 192.168.51.103:7777 7777

在 unix 上,对于所有的网络接口的 DNS 条目都存储在 /etc/resolv.conf 文件中。主机域也储存在这个文件中。最小化配置如下:

nameserver 78.31.70.238

search sleepyowl.net intern.lab

domain sleepyowl.net

检查系统域名:

# hostname -d # 等同于 dnsdomainname
Windows

在 Windows 上,DNS 配置于每个网络接口。要显示配置的 DNS 和清空 DNS 缓存可是使用:

# ipconfig /? # 显示帮助

# ipconfig /all # 显示所有信息包括 DNS

# ipconfig /flushdns # 清除 DNS 缓存

Dig 是你测试 DNS 设置的好朋友。举个例子,用于测试的 DNS 服务器为 213.133.105.2 ns.second-ns.de。查看哪个服务器客户端接收应答(简单应答).

# dig sleepyowl.net

sleepyowl.net. 600 IN A 78.31.70.238

;; SERVER: 192.168.51.254#53(192.168.51.254)

路由器 192.168.51.254 应答了,并返回了一条 A 条目(记录)。任何条目都可查询,DNS 服务器可用 @ 来选定:

# dig MX google.com

# dig @127.0.0.1 NS sun.com # 测试本地服务器

# dig @204.97.212.10 NS MX heise.de # 查询外部

# dig AXFR @ns1.xname.org cb.vu # 查看区传送(zone transfer)

程式 host 也很强大。

# host -t MX cb.vu # 获取邮件 MX 记录

# host -t NS -T sun.com # 通过 TCP 连接获取 NS 记录

# host -a sleepyowl.net # 获取所有

查找属于一个 IP 地址(in-addr.arpa.)的域名。可用 dig, host 和 nslookup 命令查询:

# dig -x 78.31.70.238

# host 78.31.70.238

# nslookup 78.31.70.238

/etc/hosts

单个主机可以配置于文件 /etc/hosts 来代替本地正在运行的 named 反向域名查询。格式很简单,举个例子:

78.31.70.238 sleepyowl.net sleepyowl

对于 hosts 文件和 DNS 查询之间的优先级,可在 /etc/nsswitch.conf 和 /etc/host.conf 中配置 order 名称解析。这个文件同样存在于 Windows 上,通常在:

C:/WINDOWS/SYSTEM32/DRIVERS/ETC
Linux

一些发行版(SuSE)使用 dhcpcd 作为客户端。默认网络接口是 eth0。

# dhcpcd -n eth0 # 触发更新(并不总是可以工作)

# dhcpcd -k eth0 # 释放并关闭

租约(lease)的全部信息存储在:

/var/lib/dhcpcd/dhcpcd-eth0.info
FreeBSD

FreeBSD (和 Debian) 使用 dhclient。要配置一个网络接口(如:bge0)运行:

# dhclient bge0

租约(lease)的全部信息存储在:

/var/db/dhclient.leases.bge0

使用

/etc/dhclient.conf

设置 prepend 选项或强制不同的选项:

# cat /etc/dhclient.conf

interface "rl0" {

 prepend domain-name-servers 127.0.0.1;

 default domain-name "sleepyowl.net";

 supersede domain-name "sleepyowl.net";

Windows

dhcp 租约(lease)使用 ipconfig 来更新:

# ipconfig /renew # 更新所有适配器

# ipconfig /renew LAN # 更新名叫 "LAN" 的适配器

# ipconfig /release WLAN # 释放名叫 "WLAN" 的适配器

是的,这是一个使用简单名称重新命名你的适配器的好主意!

通信量分析(Traffic analysis)

Bmonhttp://people.suug.ch/~tgr/bmon/ 是一个小的流量监控控制台,而且可以显示不同的网络接口的流量。

用 tcpdump 嗅探(sniff)
# tcpdump -nl -i bge0 not port ssh and src /(192.168.16.121 or 192.168.16.54/)

# tcpdump -l > dump && tail -f dump # 缓冲输出

# tcpdump -i rl0 -w traffic.rl0 # 把数据报文写入二进制文件

# tcpdump -r traffic.rl0 # 从文件读取数据报文(也可以使用 ethereal)

# tcpdump port 80 # 两个经典命令

# tcpdump host google.com

# tcpdump -i eth0 -X port /(110 or 143/) # 查看端口 110(POP) 或 143(IMAP)的数据报文

# tcpdump -n -i eth0 icmp # 只捕获 ping

# tcpdump -i eth0 -s 0 -A port 80 | grep GET # -s 0 为全部包, -A 为 ASCII

另一些重要选项:

-A     显示每个包清晰文本(除了报头) -X     显示包的 ASCII 文本 -l     使标准输出变为缓冲行形式 -D     显示所有可用网络接口

对于 Windows 可以使用 www.winpcap.org。使用 windump -D 来列出网络接口。

用 nmap 扫描

Nmaphttp://insecure.org/nmap/ 是一个用于 OS 探测的端口扫描工具,她通常在许多发行版上有安装,并且同样可用于 Windows。如果你不扫描你的服务器,骇客们会为你做这些

# nmap cb.vu # 扫描主机上所有保留的 TCP 端口

# nmap -sP 192.168.16.0/24 # 找出在 0/24 上主机所使用的 IP译注:通过使用 "-sP" 参数,进行 ping 扫描。缺省情况下,Nmap给每个扫描到的主机发送一个 ICMP echo 和一个 TCP ACK,主机对任何一种的响应都会被Nmap得到。

# nmap -sS -sV -O cb.vu # 做秘密 SYN 扫描来探测系统和系统服务的版本信息

PORT STATE SERVICE VERSION

22/tcp open ssh OpenSSH 3.8.1p1 FreeBSD-20060930 (protocol 2.0)

25/tcp open smtp Sendmail smtpd 8.13.6/8.13.6

80/tcp open http Apache httpd 2.0.59 ((FreeBSD) DAV/2 PHP/4.

[...]

Running: FreeBSD 5.X

Uptime 33.120 days (since Fri Aug 31 11:41:04 2007)

其他非标准但好用的工具有 hping (www.hping.org),她是一个 IP 分组组装/分析器,和 fping (fping.sourceforge.net)。fping 可以在一个循环队列(round-robin fashion)中扫描多种主机。

流量控制(QoS)

流量控制管理着一个网络的队列、流量监控、调度以及其他流量设置(traffic parameters)。以下简单实用的示例使用 Linux 和 FreeBSD 的能力来更好的利用带宽。

DSL 或有线调制解调器有一个很长的列队来提高上传吞吐量(upload
throughput)。然而用一个快速的设备(如以太网)填充这个列队将大大减少交互性。这就是限制设备上传速度有用的原因,以匹配调制解调器的实际能
力,这可以有效提高交互性。设置大约为 modem 最大速度的 90%。

Linux

给 512K 上传速度的 modem。

# tc qdisc add dev eth0 root tbf rate 480kbit latency 50ms burst 1540

# tc -s qdisc ls dev eth0 # 状态

# tc qdisc del dev eth0 root # 删除队列

# tc qdisc change dev eth0 root tbf rate 220kbit latency 50ms burst 1540

FreeBSD

FreeBSD 使用 dummynet 来控制带宽,其配置工具为 ipfw。Pipe 用来设置限制带宽的单位[K|M]{比特/秒|字节/秒},0 意味着没有限制。使用同样的 pipe 数字可重新配置它。举个例子,限制上传带宽为 500K。

# kldload dummynet # 如有必要加载这个模块

# ipfw pipe 1 config bw 500Kbit/s # 创建一个带宽限制的 pipe

# ipfw add pipe 1 ip from me to any # 转移所有上传进入这个 pipe

服务质量 (Quality of service) Linux

使用 tc 的优先级队列来优化 VoIP。在 voip-info.org 或 www.howtoforge.com 上可以看到完整的例子。假设 VoIP 使用 UDP 端口 10000:11024 并且使用 eth0 设备(也可为 ppp0 或 so)。下列命令定义了三个队列,并且用 QoS 0x1e(设置所有位) 强制 VOIP 流量到队列 1。默认流量流入队列 3,Qos Minimize-Delay 流入队列 2。

# tc qdisc add dev eth0 root handle 1: prio priomap 2 2 2 2 2 2 2 2 1 1 1 1 1 1 1 0

# tc qdisc add dev eth0 parent 1:1 handle 10: sfq

# tc qdisc add dev eth0 parent 1:2 handle 20: sfq

# tc qdisc add dev eth0 parent 1:3 handle 30: sfq

# tc filter add dev eth0 protocol ip parent 1: prio 1 u32 /

 match ip dport 10000 0x3C00 flowid 1:1 # 使用服务端端口范围

 match ip dst 123.23.0.1 flowid 1:1 # 或/和使用服务器 IP

状态和移除:

# tc -s qdisc ls dev eth0 # queue status

# tc qdisc del dev eth0 root # delete all QoS

计算端口范围和掩码 (mask)

用你所计算的端口掩码来定义 tc 过滤器的端口范围。查询 2^N 端口范围结尾,推断范围并转换成十六进制。这就是你的掩码 (mask)。例如 10000 -> 11024,它的范围是 1024。

# 2^13 (8192) # 结尾是 2^14 = 16384

# echo "obase=16;(2^14)-1024" | bc # 掩码是 0x3C00

FreeBSD

假设最大连接带宽为 500Kbit/s,我们使用优先级 100:10:1 定义 3 个队列给 VoIP:ssh:剩余所有。

# ipfw pipe 1 config bw 500Kbit/s 

# ipfw queue 1 config pipe 1 weight 100

# ipfw queue 2 config pipe 1 weight 10

# ipfw queue 3 config pipe 1 weight 1

# ipfw add 10 queue 1 proto udp dst-port 10000-11024

# ipfw add 11 queue 1 proto udp dst-ip 123.23.0.1 # 或/和使用服务器 IP

# ipfw add 20 queue 2 dsp-port ssh

# ipfw add 30 queue 3 from me to any # 剩余所有

状态和移除:

# ipfw list # 规则信息

# ipfw pipe list # 管道信息

# ipfw flush # 删除除默认外所有规则

NIS 调试

一些可工作在已配置好的 NIS 客户端上的命令:

# ypwhich # 获取提供 NIS 服务的服务器名

# domainname # 已配置的 NIS 域名

# ypcat group # 列印 NIS 映射 group

# cd /var/yp && make # 重建 yp 数据库

ypbind 正在运行吗?

# ps auxww | grep ypbind

/usr/sbin/ypbind -s -m -S servername1,servername2 # FreeBSD

/usr/sbin/ypbind # Linux

# yppoll passwd.byname

Map passwd.byname has order number 1190635041. Mon Sep 24 13:57:21 2007

The master server is servername.domain.net.

Linux
# cat /etc/yp.conf

ypserver servername

domain domain.net broadcast

原创文章,作者:kepupublish,如若转载,请注明出处:https://blog.ytso.com/59160.html

apachegoogleiptableslinuxphpwindows通信