分类目录归档:network

redmi AX6000 install openwrt & KMS

follow this link : https://openwrt.org/toh/xiaomi/redmi_ax6000

this version do not contain luci, you should install it

install web luci

opkg update
opkg install luci
opkg install luci-ssl
/etc/init.d/uhttpd restart

install openconnect

opkg install luci-proto-openconnect

install KMS

wget “https://dl.openwrt.ai/packages-23.05/aarch64_cortex-a53/kiddin9/vlmcsd_svn1113-21_aarch64_cortex-a53.ipk”

wget “https://dl.openwrt.ai/packages-23.05/aarch64_cortex-a53/kiddin9/luci-app-vlmcsd_git-24.217.56735-8015371_all.ipk”

opkg install luci-compat

opkg install vlmcsd_svn1113-21_aarch64_cortex-a53.ipk

opkg install luci-app-vlmcsd_git-24.217.56735-8015371_all.ipk

aws lightsail ipv6 路由问题

OS 为: amazon linux 2, 当开启ipv6.forwarding的时候, 发现路由就不通了

sysctl -w net.ipv6.conf.all.forwarding=1

#ping6 www.qq.co

connect: Network is unreachable

netstat -nr6 也能看到没有default route, 此时ipv6地址也无法被外部访问

如果关闭ipv6 forwarding, 那么就有默认路由, 也能ping通外部和被访问

::/0 fe80::7c:6bff:feef:ca54 UGDAe 1024 2 9 eth0

能看到路由有一个很特别的标志UGDAe, UpGatewayDynamicAllonlinkExpires

E(e): It maps to RTF_EXPIRES. It means the route has a non-infinite lifetime. In this case, the kernel probably learned the route dynamically from a RA (Router Advertisement).

这个路由其实是动态广播的, 那么这个现象就跟一个参数有关了

net.ipv6.conf.interface.accept_ra

Accept Router Advertisements; autoconfigure using them.

It also determines whether or not to transmit Router Solicitations. If and only if the functional setting is to accept Router Advertisements, Router Solicitations will be transmitted.

Possible values are: 0 Do not accept Router Advertisements. 1 Accept Router Advertisements if forwarding is disabled. 2 Overrule forwarding behaviour. Accept Router Advertisements even if forwarding is enabled.

Functional default: enabled if local forwarding is disabled. disabled if local forwarding is enabled.

Nb: per interface setting (where “interface” is the name of your network interface); “all” is a special interface: changes the settings for all interfaces

默认系统这个参数是1, 当开启forwarding的时候, 不接受路由广播, 所以这个场合, 应该修改为2, Accept Router Advertisements even if forwarding is enabled.

sysctl -w net.ipv6.conf.all.forwarding=1
sysctl -w net.ipv6.conf.eth0.accept_ra=2

备注:

 UP U
 GATEWAY G
 REJECT !
 HOST H
 REINSTATE R
 DYNAMIC D
 MODIFIED M
 DEFAULT d
 ALLONLINK a
 ADDRCONF c
 NONEXTHOP o
 EXPIRES e
 CACHE c
 FLOW f
 POLICY p
 LOCAL l
 MTU u
 WINDOW w
 IRTT i
 NOTCACHED n

小米路由R1D ipv6设置

分为普通模式和中继模式, 略有不同

  • 中继模式需要配置

/etc/config/ipv6
config ipv6 settings
list if_on "lan"
option enabled "1"
list if_on "ipv6"
option enabled "1

/etc/config/network

config interface 'lan6'
option ifname '@lan'
option proto 'dhcpv6'

可以适当配置ipv6的DNS, 非必须

  • 普通模式需要配置

/etc/config/ipv6
config ipv6 settings
list if_on "wan"
option enabled "1"
list if_on "ipv6"
option enabled "1

/etc/config/network

config interface 'wan6'
option ifname '@wan'
option proto 'dhcpv6'
list dns '240c::6666'
list dns '240c::6644'

然后重启或者/etc/init.d/network restart即可

rp_filter和fwmark base 策略路由

  • 前提:

先说下网络环境, 这边架了个tunnel, 之前无论是全部走tunnel 还是部分目标IP走tunnel都没有问题, 实现如下

ip rule add from 10.4.224.100 table routeTableName

ip route add $line via 172.16.172.1 dev tunnel (table routeTableName)

  • 新的需求: 根据部分协议,比如TCP来走这个路由, 实现办法是

iptables -t mangle -A PREROUTING -s 10.4.224.100/32 -d 10.0.0.0/8 -p tcp -m tcp -j MARK --set-xmark 3

ip rule add from 10.4.224.100 fwmark 3 table tun

在这个路由表使用的策略路由则不生效了, 相同的语句导致无法访问网络了

ip route add $line dev tunnel table tun

  • 听包看看:

在tunnel的对端服务器能看到对端回包后后续传输失败了

在本地linux 网关的tunnel听包可以看到回包也过来了

在本地linux 网关的内网听包能看到只有客户端的发包没有收到回包

那么问题就发生在tunnel 到 内网网卡这一段, 包要么是路由不对,要么是被drop了, 由于之前是可以直接访问的, 那么路由的可能性很小

  • 问题定位检测:

使用如下方式确认回包是否被drop了,配置:

sysctl -w net.ipv4.conf.default.log_martians=1
sysctl -w net.ipv4.conf.all.log_martians=1

发现有如下的检测日志:

IPv4: martian source 10.4.224.100 from 122.13.86.120, on dev tunnelX
IPv4: martian source 10.4.224.100 from 122.13.86.120, on dev tunnelX

这里由于是reverse path filter, 原理是把源和目标调换确认该设备接口是否是最佳接口, 显然回包被认为是不合适的包, 被过滤掉了

  • 问题解决:

问题就简单了, 设置rp_filter即可

sysctl -w net.ipv4.conf.default.rp_filter=2

sysctl -w net.ipv4.conf.all.rp_filter=2

  • 问题解析:

那么问题来了, 为什么原来的简单策略路由就可以, 加了–set-mark 3后, 基于fwmark的就不行呢?

从听包可以看到原有的策略路由是可以正常返回的, 包括tunnel和内网网卡

推测很大可能是因为我们使用了 ip rule add from 10.4.224.100/32 table routeTableName的方式能让rp_filter检测到回程数据包的reverse path是合理的

而rp_filter大概率是无法识别到fmwark的策略路由的, 检测的时候发现回包数据不合理被drop了

如何确认以上这番推测是否合理呢? 这里做了个测试, 从tunnel对端的机器使用tunnel接口ping 10.4.224.100

ping 10.4.224.100 -I tunnelX
PING 10.4.224.100 (10.4.224.100) from 172.16.172.1 tunnelX: 56(84) bytes of data.
^C
--- 10.4.224.100 ping statistics ---
77 packets transmitted, 0 received, 100% packet loss, time 77858ms

查看本地linux的日志可以看到数据包被drop了

Mar 18 09:37:25 gw kernel: IPv4: martian source 10.4.224.100 from 172.16.172.1, on dev tunnelX
Mar 18 09:37:25 gw kernel: IPv4: martian source 10.4.224.100 from 172.16.172.1, on dev tunnelX

由于是reverse path 校验嘛, 给它加个路由

ip route add 172.16.0.0/16 dev tunnelX table myRouteTable

于是, 通了

ping 10.4.224.100 -I tunnelX
PING 10.4.224.100 (10.4.224.100) from 172.16.172.1 tunnelX: 56(84) bytes of data.
64 bytes from 10.4.224.100: icmp_seq=1 ttl=62 time=2.22 ms
64 bytes from 10.4.224.100: icmp_seq=2 ttl=62 time=37.9 ms

至于为什么ping值这么飘忽…因为这个是wifi的IP啊, 我去毒打wifi管理员了



  • 背景资料:

关于rp_filter的问题可以参考本站这个链接:

/usr/share/doc/kernel-doc-2.6.32/Documentation/networking/ip-sysctl.txt rp_filter -

INTEGER 0 - No source validation. 不检测源

1 - Strict mode as defined in RFC3704 Strict Reverse Path Each incoming packet is tested against the FIB and if the interface is not the best reverse path the packet check will fail. By default failed packets are discarded.

严格检测模式

2 - Loose mode as defined in RFC3704 Loose Reverse Path Each incoming packet's source address is also tested against the FIB and if the source address is not reachable via any interface the packet check will fail.

松散检测模式, 只要有一个设备接口有这个地址就可以

Current recommended practice in RFC3704 is to enable strict mode to prevent IP spoofing from DDos attacks. If using asymmetric routing or other complicated routing, then loose mode is recommended. The max value from conf/{all,interface}/rp_filter is used when doing source validation on the {interface}. Default value is 0. Note that some distributions enable it in startup scripts.

  • 参考资料:

https://blog.csdn.net/dog250/article/details/7947705

wg 配置

wg 是性能非常优秀的链路接入软件, 在linux kernel 5.6的时候已经被纳入正式内核

以下介绍下在centos7 下的配置:

1.先升级下系统版本到最新

#yum upgrade

2. 安装必要的系统依赖库和软件,客户端和服务端一样操作

# sudo yum install epel-release elrepo-release
# sudo yum install yum-plugin-elrepo
# sudo yum install kmod-wireguard wireguard-tools

3. 生成服务器和客户端的公钥私钥

#服务器和客户端都需要分别执行一遍

wg genkey | tee privatekey | wg pubkey > publickey

4. 配置文件

#客户端

[Interface]
PrivateKey = “客户端私钥”
Address = 172.16.52.52/24
DNS = 8.8.8.8
MTU = 1420
[Peer]
PublicKey = “服务端公钥”
Endpoint = “服务端接入IP”:4430
AllowedIPs = 0.0.0.0/0
PersistentKeepalive = 25

服务端

[Interface]
Address = 172.16.52.0/24
MTU = 1420
SaveConfig = true
ListenPort = 4430
PrivateKey = “服务端私钥”
[Peer]
PublicKey = “客户端公钥”
AllowedIPs = 172.16.52.52/32

5. 服务端转发配置

sysctl -w net.ipv4.ip_forward=1
iptables -t nat -I POSTROUTING -s 172.16.52.0/24 -o eth1 -j MASQUERADE

6. 开启脚本:

systemctl enable wg-quick@wg0

7. 可能产生的问题:

1) MSS导致大包无法通过, 这个是NAT代理常见的问题, 现象是ping 或者部分小网页能打开, 大的网页则卡住了, 一般都是MSS导致, 需要设置小MSS

iptables -t mangle -A POSTROUTING -p tcp –tcp-flags SYN,RST SYN -o eth1 -j TCPMSS –set-mss 1400

iPhone监听移动数据

1.使用USB数据线连接iPhone和Mac

2.打开iTunes,查看UDID编号

3.建立RVI接口,打开终端,输入命令行:

rvictls -s

成功建立了RVI接口后,会输出:[Starting device 你的UDID [SUCCEEDED] with interface rvi0]

rvi0既是新建的接口。

4.查询接口,输入命令行:

ifconfig -l

会发现新增了一个rvi0的链接。

5.开始进行抓包,可以使用tcpdump命令或者其他专业的抓包工具进行抓包,本文使用Wireshark进行抓包。

打开Wireshark以后,在Start下新增了一个rvi0的链接,选择它,然后点击Start开始抓包。

参考文章: https://zhuanlan.zhihu.com/p/23823231

特别感谢: 纪总

cisco dhcp snoop and arp inspect

最近在调整网络设置,因此重温了下DHCP SNOOP 和ARP INSPECT 的原理和设置

一 DHCP SNOOPING

简单来说,dhcp snooping通过能过滤非法的dhcp信息,并维护着一个mac-ip的数据库

1.启用dhcp snooping

(config)#ip dhcp snooping  (启用)

(config)#ip dhcp snooping vlan 4,8,16( 你要监视的vlan)

(config)#ip dhcp snooping database flash:dhcp.db (维护的那个DB,这里是放在闪存里边)

(config-if)#ip dhcp snooping trust  (对上联端口或者DHCP服务器端口启用trust)

默认状态下,所有的非trust端口都无法响应DHCP请求,因此:非法的DHCP Server就给block掉了

二 ARP INSPECT

启用了dhcp snooping之后就建立了mac-ip的对应表,因此能在此基础上开启arp inspection,屏蔽非法的mac-ip通信请求

(config)#ip arp inspection vlan 4,8,16
(config)#ip arp inspection validate src-mac ip
(config-if)#ip arp inspection trust  (对上联端口或者静态IP端口启用trust)

启用以上设置后,所有非trust端口的数据包都需要跟数据库中的mac-ip(flash:dhcp.db)校验,这里只校验了源mac和ip,对目标mac-ip不做校验(为什么?因为目标如果在其他交换机,这里的dhcp.db是没有记录的)

三 注意点

需要特别指出:dhcp snooping的数据库有个learning的过程,这个对应着dhcp请求的ack应答报文

如果在客户端已经获取IP后再启用arp inspection,会导致该客户端因没有mac-ip的对应而给屏蔽!

ddos 与 黑洞路由

通常遇到ddos或者其他攻击,简单想到的办法是iptable,比如

iptable -A INPUT -s IP -j DROP

实际上,超大规模的攻击使用iptable过滤会非常耗CPU,一般建议使用黑洞路由

从这个网址: http://www.cyberciti.biz/tips/how-do-i-drop-or-block-attackers-ip-with-null-routes.html 可以看到

假设需要屏蔽掉202.33.8.49,有三种不同做法:

1. # route add 202.33.8.49 gw 127.0.0.1 lo

2.#ip route add blackhole 202.33.8.49

3.#route add -host 202.33.8.49 reject

当然,文中没有解释这三种做法的区别与优劣,这里简单说说个人看法

第一种,是把这个ip的路由导向lo 127.0.0.1,其实是相当犯傻的行为,系统会自动的尝试往lo发送数据(tcpdump可见)

第二种,是加入黑洞路由,意思就是直接就丢弃了,当然也不会有对应的应用层程序收到数据包尝试回包了

第三种,先看看man里边怎么说: “reject install a blocking route, which will force a route lookup to fail.  This is for example used to mask out networks before using the default route.  This is NOT for firewalling.”  reject是阻止了”到”这个IP的网络,通常用于在使用默认路由前标识网络,不适用于防火墙,为什么呢?因为应用层程序能收到数据包,只不过尝试回包时会知道网络不可达而已

由此可见,从性能来说使用blackhole是最好的办法

参考:http://en.wikipedia.org/wiki/Null_route

思科交换机查看状态

#sh ip interface brief
Interface IP-Address OK? Method Status Protocol
FastEthernet0/1 unassigned YES unset down down
FastEthernet0/2 unassigned YES unset up up
能看到端口状态,主要是链路状态

#sh interfaces status
Port Name Status Vlan Duplex Speed Type
Fa0/1 “Connect to Cicso notconnect 8 auto auto 10/100BaseTX
Fa0/2 “Connect to Cicso connected 8 a-full a-100 10/100BaseTX
侧重于vlan和描述性的东西,这里能看到链接速度

iphone QQ 端口

今天有个颇蛋疼的需求,iphoneQQ 在公司不是很正常,初步怀疑是端口没开放导致的
1.查看手机的IP,在cisco 6506上建立策略路由
1)建立ACL
access-list extended 188
permit ip host $iphoneIP$ any

2)建立策略路由

route-map src-route permit 20(原来有这个策略路由,新增个规则)
match ip address 188
set ip next-hop $linuxNAT$

3)在手机的VLAN接口生效

ip policy route-map src-route

2. 在linux设置NAT转发请求:

/sbin/iptables -t nat -A POSTROUTING -s $iphoneIP$/32 -o eth0 -j MASQUERADE
sysctl -w net.ipv4.ip_forward=1

3.在linux NAT机器上听包:

tcpdump -nn host $iphoneIP$

抓到了,iphoneQQ访问的是14000端口