Interesting SNAT bug
TIL
720
White

Nguyễn Gia viết ngày 04/01/2019

Chi tiết

https://tech.xing.com/a-reason-for-unexplained-connection-timeouts-on-kubernetes-docker-abd041cf7e02

Tóm tắt

Vì IP của container là ko public cho network ngoài nên khi một packet đi từ container qua host để ra ngoài thì host sẽ thực hiện SNAT, tức là viết lại source address cho packet, đồng thời đưa vào conntrack để map ngược lại khi có response.
Lúc đưa vào conntrack thì sẽ gọi hàm get_unique_tuple để tìm ra một unique tuple có dạng src (ip, port, ...) <-> dest (ip, port, ...) dùng để mapping.
Trong hàm này lại gọi hàm nf_nat_used_tuple để check xem port nào đã được dùng.
Nếu không chỉ định flag để tìm port một cách ngẫu nhiên thì get_unique_tuple sẽ trả về port bé nhất đang available.
Tuy nhiên từ lúc kết quả được trả về cho đến khi tuple đấy được dùng thì có một khoảng thời gian nhất định và race condition xảy ra ở đây.
Kết quả là packet từ 2 container khác nhau khi đi qua host được map chung vào 1 conn nên packet của 1 container sẽ bị drop.

Bình luận


White
{{ comment.user.name }}
Bỏ hay Hay
{{comment.like_count}}
Male avatar
{{ comment_error }}
Hủy
   

Hiển thị thử

Chỉnh sửa

White

Nguyễn Gia

7 bài viết.
46 người follow
Kipalog
{{userFollowed ? 'Following' : 'Follow'}}
Cùng một tác giả
White
21 12
Cảm xúc khi học javascript y hệt như bài viết này nên mình dịch lại cho vui. Link gốc: https://hackernoon.com/howitfeelstolearnjavascriptin2016d3a7...
Nguyễn Gia viết hơn 2 năm trước
21 12
White
21 2
Intro Trong các coding contest, khi mà kết quả là một số rất lớn (n hoặc tổ hợp), không dùng kiểu dữ liệu primitive để lưu được thì đề bài thường ...
Nguyễn Gia viết hơn 2 năm trước
21 2
White
13 1
Thi thoảng la liếm github hay gặp một số từ viết tắt mà chẳng hiểu nghĩa là gì nên tổng hợp vào đây. | Từ viết tắt | Nghĩa | | |::| |AFAICT|As far...
Nguyễn Gia viết hơn 2 năm trước
13 1
Bài viết liên quan
White
0 4
fCC: Technical Documentation Page note So I have finished the HTML part of this exercise and I want to come here to lament about the lengthy HTML ...
HungHayHo viết 1 năm trước
0 4
White
2 0
I used Spring boot, Hibernate few times back then at University, I'v started using it again recently. In this (Link), I want to check how Spring J...
Rey viết 7 tháng trước
2 0
White
22 1
Toán tử XOR có tính chất: + A XOR A = 0 + 0 XOR A = A Với tính chất này, có thể cài đặt bài toán sau với độ phức tạp O(N) về runtime, và với O(1)...
kiennt viết gần 3 năm trước
22 1
{{like_count}}

kipalog

{{ comment_count }}

bình luận

{{liked ? "Đã kipalog" : "Kipalog"}}


White
{{userFollowed ? 'Following' : 'Follow'}}
7 bài viết.
46 người follow

 Đầu mục bài viết

Vẫn còn nữa! x

Kipalog vẫn còn rất nhiều bài viết hay và chủ đề thú vị chờ bạn khám phá!