LINUX.ORG.RU

можно ли отключить вычет или зафиксировать TTL транзитного и всего трафика в ядре? без iptables

 , , , ,


0

3

вот разобрался diff этого ядра

diff -ur /media/btrfs/draga/android_kernel_lge_msm8974/include/net/ip.h ./include/net/ip.h
--- /media/btrfs/draga/android_kernel_lge_msm8974/include/net/ip.h	2018-09-30 14:36:41.063724433 +0300
+++ ./include/net/ip.h	2018-09-30 17:33:34.897346749 +0300
@@ -257,7 +257,9 @@
 	u32 check = (__force u32)iph->check;
 	check += (__force u32)htons(0x0100);
 	iph->check = (__force __sum16)(check + (check>=0xFFFF));
-	return --iph->ttl;
+	iph->ttl = 64;
+	ip_send_check(iph);
+	return iph->ttl;
 }
 
 static inline
diff -ur /media/btrfs/draga/android_kernel_lge_msm8974/net/ipv6/exthdrs.c ./net/ipv6/exthdrs.c
--- /media/btrfs/draga/android_kernel_lge_msm8974/net/ipv6/exthdrs.c	2018-09-30 14:36:41.452718918 +0300
+++ ./net/ipv6/exthdrs.c	2018-09-30 17:35:36.275282555 +0300
@@ -482,7 +482,7 @@
 			kfree_skb(skb);
 			return -1;
 		}
-		ipv6_hdr(skb)->hop_limit--;
+		ipv6_hdr(skb)->hop_limit = 64;
 		goto looped_back;
 	}
 
diff -ur /media/btrfs/draga/android_kernel_lge_msm8974/net/ipv6/ip6mr.c ./net/ipv6/ip6mr.c
--- /media/btrfs/draga/android_kernel_lge_msm8974/net/ipv6/ip6mr.c	2018-09-30 14:36:41.454718890 +0300
+++ ./net/ipv6/ip6mr.c	2018-09-30 17:34:48.591058525 +0300
@@ -1964,7 +1964,7 @@
 		goto out_free;
 
 	ipv6h = ipv6_hdr(skb);
-	ipv6h->hop_limit--;
+	ipv6h->hop_limit = 64;
 
 	IP6CB(skb)->flags |= IP6SKB_FORWARDED;
 
diff -ur /media/btrfs/draga/android_kernel_lge_msm8974/net/ipv6/ip6_output.c ./net/ipv6/ip6_output.c
--- /media/btrfs/draga/android_kernel_lge_msm8974/net/ipv6/ip6_output.c	2018-09-30 14:36:41.454718890 +0300
+++ ./net/ipv6/ip6_output.c	2018-09-30 17:34:30.549363055 +0300
@@ -525,7 +525,7 @@
 
 	/* Mangling hops number delayed to point after skb COW */
 
-	hdr->hop_limit--;
+	hdr->hop_limit = 64;
 
 	IP6_INC_STATS_BH(net, ip6_dst_idev(dst), IPSTATS_MIB_OUTFORWDATAGRAMS);
 	return NF_HOOK(NFPROTO_IPV6, NF_INET_FORWARD, skb, skb->dev, dst->dev,
diff -ur /media/btrfs/draga/android_kernel_lge_msm8974/net/netfilter/xt_TEE.c ./net/netfilter/xt_TEE.c
--- /media/btrfs/draga/android_kernel_lge_msm8974/net/netfilter/xt_TEE.c	2018-09-30 14:36:41.487718422 +0300
+++ ./net/netfilter/xt_TEE.c	2018-09-30 17:54:21.838964063 +0300
@@ -120,7 +120,7 @@
 	iph->frag_off |= htons(IP_DF);
 	if (par->hooknum == NF_INET_PRE_ROUTING ||
 	    par->hooknum == NF_INET_LOCAL_IN)
-		--iph->ttl;
+		iph->ttl = 64;
 	ip_send_check(iph);
 
 	if (tee_tg_route4(skb, info)) {
@@ -183,7 +183,7 @@
 	if (par->hooknum == NF_INET_PRE_ROUTING ||
 	    par->hooknum == NF_INET_LOCAL_IN) {
 		struct ipv6hdr *iph = ipv6_hdr(skb);
-		--iph->hop_limit;
+		iph->hop_limit = 64;
 	}
 	if (tee_tg_route6(skb, info)) {
 		percpu_write(tee_active, true);

Deleted

Последнее исправление: Deleted (всего исправлений: 4)

Ответ на: комментарий от Deleted

Потому что там этого и нет *ba-dum-tsss*

Линукс ковыряется в пакете только тогда, когда он работает роутером (там да, можно запатчить это дело), а когда пакеты посылает он сам - ttl ставится из юзерспейса (по другому проги типа traceroute не работали бы)

Если погрепать ttl в сорцах ядра (в /net/) то можно найти где он упоминается.

timdorohin ★★★★
()
Ответ на: комментарий от anonymous

ето если ttl<=1 отправляет icmp

может это?

int ip_decrease_ttl(struct iphdr *iph)
{
	u32 check = (__force u32)iph->check;
	check += (__force u32)htons(0x0100);
	iph->check = (__force __sum16)(check + (check>=0xFFFF));
	return --iph->ttl;
}

Deleted
()
Ответ на: комментарий от timdorohin

ttl ставится по дефолту ядром, из sysctl параметра net.ipv4.ip_default_ttl - его и смотреть и патчевать дефолт.

NiTr0 ★★★★★
()
Ответ на: комментарий от timdorohin

не получилось ни так return iph->ttl = 64 ни так return iph->ttl Мажет контрольная сумма там?

Deleted
()
28 апреля 2019 г.
Ответ на: комментарий от anonymous

Вот же она

ну ты шустрый, я только сейчас дошел, спасибо

Deleted
()
Ответ на: комментарий от timdorohin

Линукс ковыряется в пакете только тогда, когда он работает роутером (там да, можно запатчить это дело), а когда пакеты посылает он сам - ttl ставится из юзерспейса (по другому проги типа traceroute не работали бы)

Бред какой. ttl в traceroute выставляется только потому, что там специально идёт работа с raw-сокетом. При этом надо ВСЁ самому выставлять, и как следствие, с этим можно работать только с соответствующими привилегиями. IP стек работает в двух режимах: локальный процесс создаёт пакеты не для raw с системно выставленным ttl. В транзитных пакетах ttl уменьшается.

vodz ★★★★★
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.