kk Blog —— 通用基础


date [-d @int|str] [+%s|"+%F %T"]
netstat -ltunp
sar -n DEV 1

udp vpn, 代理dota2

问题

手机端MTU有时是1300???,改大了似乎tcp不通,改成1350似乎没问题。 ifconfig rmnet_data0 mtu 1350

方案

用udp fullnat,起始点在包的末尾加上最终目标IP,中间点以目标IP为VIP建立session,最后点去除额外加的数据,然后发给目标IP

方法一

client(dota2):

1
2
3
4
5
6
7
8
9
10
11
12
ip route add default via 192.168.56.3 table 1
ip rule add to 103.10.0.0/16 table 1
ip rule add to 106.52.0.0/16 table 1
ip rule add to 139.45.0.0/16 table 1
ip rule add to 146.66.0.0/16 table 1
ip rule add to 153.254.0.0/16 table 1
ip rule add to 155.133.0.0/16 table 1
ip rule add to 162.254.0.0/16 table 1
ip rule add to 185.25.0.0/16 table 1
ip rule add to 190.217.0.0/16 table 1
ip rule add to 205.185.0.0/16 table 1
ip rule add to 205.196.0.0/16 table 1

client不用安装模块,通过策略路由将包导到本地虚拟机, 发出包 192.168.8.100:12345 –> 153.254.86.167:27023

start_point(local vm):

1
2
3
insmod ip_vs.ko; insmod ip_vs_wrr.ko
echo 192.168.8.103 > /proc/sys/net/ipv4/vs/laddr_v4_str
echo 106.52.108.171 > /proc/sys/net/ipv4/vs/default_dest_v4_str

收到包: 192.168.8.100:12345 –> 153.254.86.167:27023 发出包: 192.168.8.103:5001 –> 106.52.108.171:27023 在包的末尾加上153.254.86.167 收包和发包可以不在同一网卡

middle_point(gz):

1
2
insmod ip_vs.ko; insmod ip_vs_wrr.ko
echo 101.32.220.184 > /proc/sys/net/ipv4/vs/default_dest_v4_str

单纯转发

end_point(hk):

1
insmod ip_vs.ko; insmod ip_vs_wrr.ko

取出包的末尾153.254.86.167作为rs,去除末尾自己加的数据,然后转发

用法二:

client(dota2):

1
2
insmod ip_vs.ko local_out=1
echo 119.29.157.106 > /proc/sys/net/ipv4/vs/default_dest_v4_str

在包过local_out时修改目标IP为middle_ip、末尾加数据、建立session,session按cip:cport –> middle_ip:dport建,所以两条连接的cport、dport相同而dip不同则会冲突(TODO) 只换ip,没有重新路由,所以dip和middle_ip的出口需要在一张网卡上

middle_point(gz):

1
2
insmod ip_vs.ko; insmod ip_vs_wrr.ko
echo 101.32.220.184 > /proc/sys/net/ipv4/vs/default_dest_v4_str

end_point(hk):

1
insmod ip_vs.ko; insmod ip_vs_wrr.ko

mysql 分组后的组内排序

方法一

https://www.cnblogs.com/hxfcodelife/p/10226934.html

数据库的查询顺序是先分组的,最后才将结果进行排序。 group by XX order by yy 是不行的

用 row_number() over(partition by XX order by YY desc)

1
select a.Classid,a.English from (select Classid,English,row_number() over(partition by Classid order by English desc) as n from CJ) a where n<=2

方法二

https://blog.csdn.net/u014508939/article/details/100561133

用 GROUP_CONCAT, SUBSTRING_INDEX

1
SELECT SUBSTRING_INDEX(GROUP_CONCAT(id, ORDER BY update_time DESC), ',', 1) FROM goods GROUP BY good_id OEDER by update_time DESC;