refactor: 문서 개선 중

This commit is contained in:
donghyeon-ka
2026-09-21 14:30:55 +09:00
parent c93cdea150
commit 805a18f486
1497 changed files with 525837 additions and 59152 deletions
@@ -0,0 +1,26 @@
digraph techviz {
graph [rankdir=LR, splines=ortho, nodesep=0.55, ranksep=0.85];
node [fontname=Helvetica, fontsize=11, margin="0.18,0.12", style="rounded,filled", fillcolor=white, color="#2d4357", penwidth=1.5];
edge [fontname=Helvetica, fontsize=10, color="#364b5f", penwidth=1.4, arrowsize=0.75];
subgraph cluster_0 {
label="forward · priority filter - 10";
style="rounded,dashed";
color="#66788a";
n1 [label="ct state new accept", shape=box, style="rounded,filled"];
}
subgraph cluster_1 {
label="ip libvirt_network · guest_input";
style="rounded,dashed";
color="#66788a";
n2 [label="inserted accept", shape=box, style="rounded,filled"];
n3 [label="reject", shape=box, style="rounded,filled"];
}
n0 [label="inbound packet", shape=box, style="rounded,filled"];
n4 [label="edge nginx", shape=box, style="rounded,filled"];
n5 [label="connection refused", shape=box, style="rounded,filled"];
n0 -> n1 [label="forward hook", style=solid];
n1 -> n2 [label="after insert", style=solid];
n1 -> n3 [label="before insert", style=solid];
n2 -> n4 [label="accept", style=solid];
n3 -> n5 [label="reject", style=solid];
}
@@ -2,10 +2,10 @@
"harness_version": "0.2.0",
"spec_id": "nftables-forward-hook-chain-order",
"spec_version": "1.1",
"spec_sha256": "7c412e3a6278b75551ce56f35693dd236d0b3bf0962c2788a87703123f009f9f",
"spec_sha256": "a035a69d70e850cb32cb89258e9912fdcd4533a8d312be789b040a12b51b1225",
"source_context": {
"document": "docs/virtualization/final/document.md",
"document_sha256": "60d902c7aed218ba637b48603a3bd0e6b193fea59c9de97ffdb8e05d5087aedd",
"document_sha256": "8c4ecc64c8cea9a4450ed7131fdd9cb2048dc092b66cd969f6346ed77887c210",
"anchor": {
"kind": "heading",
"value": "180. nftables 는 앞 체인의 `accept` 로 뒤 체인의 `reject` 를 막지 못한다",
@@ -14,9 +14,10 @@
},
"outputs": [
"nftables-forward-hook-chain-order.svg",
"nftables-forward-hook-chain-order.drawio",
"nftables-forward-hook-chain-order.mmd",
"nftables-forward-hook-chain-order.d2",
"nftables-forward-hook-chain-order.dot",
"nftables-forward-hook-chain-order.drawio",
"nftables-forward-hook-chain-order.excalidraw",
"nftables-forward-hook-chain-order.alt.md"
],
@@ -27,5 +28,15 @@
"reference_ids": [
"payment-event-flow"
],
"diagram_only": true
"diagram_only": true,
"source_spec_file_sha256": "6ced898c845eb65e6dccc403fcadfbf82d3805f7fe089c75241132621201298e",
"output_sha256": {
"nftables-forward-hook-chain-order.svg": "f5cf1414171d34677a6e2e430b4269a8687a5968f50488f2257ddc3d3be808db",
"nftables-forward-hook-chain-order.mmd": "a523ee8885b46bc40937b8992f9ebf65d273eaf378f980af1026bbf2cda84e83",
"nftables-forward-hook-chain-order.d2": "117662bdc7955bb01ceb6a36136ee2d5d6da727301b5c0f2c24c75fc71454c87",
"nftables-forward-hook-chain-order.dot": "e71e3d8dc4a0e7417e4ef8514b79ec52099609c50bf895d31888e3ed4add8166",
"nftables-forward-hook-chain-order.drawio": "9a60b8116a117e18d83eb6ba78048f3400578dd62adb3247aa88f3d5bffb0e98",
"nftables-forward-hook-chain-order.excalidraw": "efa24031fb83393e57aeebd824f3e839c97c5b55f61ae1922c6933a4f1e709b7",
"nftables-forward-hook-chain-order.alt.md": "aa81f31c4403feadabb90846086ab5f29b821fd82712fcb275d8e8c0b92e17b2"
}
}
@@ -2,7 +2,7 @@
<svg xmlns="http://www.w3.org/2000/svg" width="1298" height="434" viewBox="0 0 1298 434" role="img" aria-labelledby="diagram-title diagram-description">
<title id="diagram-title">같은 forward 훅에 붙은 base 체인 둘이 우선순위 순으로 이어서 평가되고, 앞 체인의 accept 는 뒤 체인의 reject 를 막지 못한다</title>
<desc id="diagram-description">왼쪽에서 오른쪽으로 읽는다. 왼쪽 끝이 밖에서 친 curl 이 만든 inbound packet 이고 forward 훅으로 들어간다. 첫 점선 상자가 DNAT 파일에 둔 base 체인이다. priority filter - 10 이라 먼저 돌고, 그 안의 ct state new accept 가 이 packet 을 통과시킨다. 다음 점선 상자가 libvirt 가 만든 ip libvirt_network 테이블의 guest_input 체인이다. 앞 체인의 accept 는 평가를 끝내지 않으므로 같은 packet 이 이 체인으로 이어진다. 그 안의 상자 둘은 같은 체인의 맨 앞과 맨 끝이다. 구멍을 넣기 전에는 맨 앞이 비어 있어 packet 이 ct state established,related accept 에 걸리지 못한 채 체인 끝 reject 에 닿았고 connection refused 로 끝났다. 그 reject 규칙의 카운터가 4 패킷 240 바이트다. insert 로 구멍을 넣으면 그 규칙이 맨 앞에 서서 같은 packet 을 먼저 받아 192.168.122.10 의 엣지 nginx 로 보낸다. 실선이 구멍을 넣은 뒤의 경로이고 점선이 넣기 전의 경로다. 이 그림은 그 규칙이 libvirt 네트워크를 다시 세우면 사라진다는 것은 말하지 않는다.</desc>
<metadata>{&quot;techviz&quot;:{&quot;spec_version&quot;:&quot;1.1&quot;,&quot;id&quot;:&quot;nftables-forward-hook-chain-order&quot;,&quot;profile&quot;:&quot;component-flow&quot;},&quot;source_context&quot;:{&quot;document&quot;:&quot;docs/virtualization/final/document.md&quot;,&quot;document_sha256&quot;:&quot;60d902c7aed218ba637b48603a3bd0e6b193fea59c9de97ffdb8e05d5087aedd&quot;,&quot;anchor&quot;:{&quot;kind&quot;:&quot;heading&quot;,&quot;value&quot;:&quot;180. nftables 는 앞 체인의 `accept` 로 뒤 체인의 `reject` 를 막지 못한다&quot;,&quot;line&quot;:7805}},&quot;evidence_policy&quot;:&quot;Each factual element cites source lines or is marked assumption.&quot;,&quot;diagram_only&quot;:true}</metadata>
<metadata>{&quot;techviz&quot;:{&quot;spec_version&quot;:&quot;1.1&quot;,&quot;id&quot;:&quot;nftables-forward-hook-chain-order&quot;,&quot;profile&quot;:&quot;component-flow&quot;},&quot;source_context&quot;:{&quot;document&quot;:&quot;docs/virtualization/final/document.md&quot;,&quot;document_sha256&quot;:&quot;8c4ecc64c8cea9a4450ed7131fdd9cb2048dc092b66cd969f6346ed77887c210&quot;,&quot;anchor&quot;:{&quot;kind&quot;:&quot;heading&quot;,&quot;value&quot;:&quot;180. nftables 는 앞 체인의 `accept` 로 뒤 체인의 `reject` 를 막지 못한다&quot;,&quot;line&quot;:7805}},&quot;evidence_policy&quot;:&quot;Each factual element cites source lines or is marked assumption.&quot;,&quot;diagram_only&quot;:true}</metadata>
<defs>
<marker id="arrow" viewBox="0 0 10 10" refX="9" refY="5" markerWidth="7" markerHeight="7" orient="auto-start-reverse">
<path d="M 0 0 L 10 5 L 0 10 z" />

Before

Width:  |  Height:  |  Size: 9.7 KiB

After

Width:  |  Height:  |  Size: 9.7 KiB