<feed xmlns='http://www.w3.org/2005/Atom'>
<title>ansible-distro-configure.git/site.yml, branch mac-nvidia-drivers</title>
<subtitle>Ansible Roles to configure different (linux) distros
</subtitle>
<link rel='alternate' type='text/html' href='http://git.a14m.dev/ansible-distro-configure.git/'/>
<entry>
<title>Fix IPv6 first-request failure caused by ICMPv6 Redirects</title>
<updated>2026-07-09T20:57:11+00:00</updated>
<author>
<name>Ahmed AbdelHalim</name>
<email>pm@a14m.me</email>
</author>
<published>2026-07-09T20:57:11+00:00</published>
<link rel='alternate' type='text/html' href='http://git.a14m.dev/ansible-distro-configure.git/commit/?id=2a62cabd9a521dbc7ec14b260230bf4b95fdfb12'/>
<id>2a62cabd9a521dbc7ec14b260230bf4b95fdfb12</id>
<content type='text'>
Root cause: Pi, the ISP router (FritzBox), and LAN clients share the same
L2 segment. When Pi forwards a client's IPv6 packet to an external GUA
destination, the Linux kernel detects that the ISP router is a "better"
next-hop on the same link and sends an ICMPv6 Redirect (type 137) to the
client. The client obeys the redirect and sends its first SYN to the ISP
router directly — Pi never forwards the original packet. The ISP router
applies per-device content filtering to the unmasqueraded client GUA and
issues a RST. This produced the symptom of the first IPv6 request failing
with "Connection reset by peer" every ~30-60 seconds (matching the FritzBox
RA interval, after which clients re-resolve their default gateway).

Diagnosis method: tcpdump with MAC addresses (-e flag) on Pi's end0 caught
the ICMPv6 Redirect being sent immediately after the first SYN arrived.
Inserting a DROP rule for icmpv6-type redirect at position 1 in ip6tables
OUTPUT confirmed the fix — 0 failures across extended testing.

Fix:
- Drop ICMPv6 Redirect (type 137) in ip6tables OUTPUT as the first rule,
  before the ACCEPT rule, in both direct and VPN modes
- Flush ip6tables OUTPUT chain on clear_rules() instead of per-rule -D
  deletion, which was fragile and left stale rules accumulating across
  mode switches (previously caused duplicate/conflicting OUTPUT rules)
- Flush ip6tables nat POSTROUTING table instead of per-rule -D deletion
  for the same reason

Also documents the ICMPv6 Redirect issue and IPv6 masquerade rationale
in roles/gateway/README.md for future reference.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
Root cause: Pi, the ISP router (FritzBox), and LAN clients share the same
L2 segment. When Pi forwards a client's IPv6 packet to an external GUA
destination, the Linux kernel detects that the ISP router is a "better"
next-hop on the same link and sends an ICMPv6 Redirect (type 137) to the
client. The client obeys the redirect and sends its first SYN to the ISP
router directly — Pi never forwards the original packet. The ISP router
applies per-device content filtering to the unmasqueraded client GUA and
issues a RST. This produced the symptom of the first IPv6 request failing
with "Connection reset by peer" every ~30-60 seconds (matching the FritzBox
RA interval, after which clients re-resolve their default gateway).

Diagnosis method: tcpdump with MAC addresses (-e flag) on Pi's end0 caught
the ICMPv6 Redirect being sent immediately after the first SYN arrived.
Inserting a DROP rule for icmpv6-type redirect at position 1 in ip6tables
OUTPUT confirmed the fix — 0 failures across extended testing.

Fix:
- Drop ICMPv6 Redirect (type 137) in ip6tables OUTPUT as the first rule,
  before the ACCEPT rule, in both direct and VPN modes
- Flush ip6tables OUTPUT chain on clear_rules() instead of per-rule -D
  deletion, which was fragile and left stale rules accumulating across
  mode switches (previously caused duplicate/conflicting OUTPUT rules)
- Flush ip6tables nat POSTROUTING table instead of per-rule -D deletion
  for the same reason

Also documents the ICMPv6 Redirect issue and IPv6 masquerade rationale
in roles/gateway/README.md for future reference.

Co-Authored-By: Claude Sonnet 4.6 &lt;noreply@anthropic.com&gt;
</pre>
</div>
</content>
</entry>
<entry>
<title>Add pve-lxc service provisioning using service.yml and containers group</title>
<updated>2026-07-07T14:30:43+00:00</updated>
<author>
<name>Ahmed AbdelHalim</name>
<email>pm@a14m.me</email>
</author>
<published>2026-07-07T14:30:43+00:00</published>
<link rel='alternate' type='text/html' href='http://git.a14m.dev/ansible-distro-configure.git/commit/?id=01f6f5665beefb0e223e022d07fb9770a7cdbeb6'/>
<id>01f6f5665beefb0e223e022d07fb9770a7cdbeb6</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Remove small bootstrap playbook and merge it in site.yml</title>
<updated>2026-03-04T16:32:14+00:00</updated>
<author>
<name>Ahmed AbdelHalim</name>
<email>pm@a14m.me</email>
</author>
<published>2026-03-04T14:39:58+00:00</published>
<link rel='alternate' type='text/html' href='http://git.a14m.dev/ansible-distro-configure.git/commit/?id=d0c0b3019029a7f078f86f801069c565951edd62'/>
<id>d0c0b3019029a7f078f86f801069c565951edd62</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Split the playbooks into bootstrap and configure</title>
<updated>2025-09-12T19:35:41+00:00</updated>
<author>
<name>Ahmed AbdelHalim</name>
<email>pm@a14m.me</email>
</author>
<published>2025-09-12T19:31:20+00:00</published>
<link rel='alternate' type='text/html' href='http://git.a14m.dev/ansible-distro-configure.git/commit/?id=b897020eea8133f4adf2cadaba4ab4db2343c3df'/>
<id>b897020eea8133f4adf2cadaba4ab4db2343c3df</id>
<content type='text'>
This is to allow the ansible-distro-install to safely call the bootstrap
playbook without getting validation errors about the other configure
roles (especially if they are not configured yet, or if running on CI)
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This is to allow the ansible-distro-install to safely call the bootstrap
playbook without getting validation errors about the other configure
roles (especially if they are not configured yet, or if running on CI)
</pre>
</div>
</content>
</entry>
<entry>
<title>Add gateway role to playbooks/tests</title>
<updated>2025-09-11T22:22:14+00:00</updated>
<author>
<name>Ahmed AbdelHalim</name>
<email>pm@a14m.me</email>
</author>
<published>2025-09-11T22:22:14+00:00</published>
<link rel='alternate' type='text/html' href='http://git.a14m.dev/ansible-distro-configure.git/commit/?id=14fd8ac4f7613d1ee08329eb67a5b2fb9f84a6ec'/>
<id>14fd8ac4f7613d1ee08329eb67a5b2fb9f84a6ec</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Refactor site playbooks to be more host oriented</title>
<updated>2025-09-10T20:20:09+00:00</updated>
<author>
<name>Ahmed AbdelHalim</name>
<email>pm@a14m.me</email>
</author>
<published>2025-09-10T20:20:09+00:00</published>
<link rel='alternate' type='text/html' href='http://git.a14m.dev/ansible-distro-configure.git/commit/?id=9ce94d35d13795c80277ffc9598074dc3fa2b9ed'/>
<id>9ce94d35d13795c80277ffc9598074dc3fa2b9ed</id>
<content type='text'>
This also improves the dependency management, making the roles less
repeating when not needing to execute multiple times
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This also improves the dependency management, making the roles less
repeating when not needing to execute multiple times
</pre>
</div>
</content>
</entry>
<entry>
<title>Add recommended argument_specs</title>
<updated>2025-09-10T17:08:56+00:00</updated>
<author>
<name>Ahmed AbdelHalim</name>
<email>pm@a14m.me</email>
</author>
<published>2025-09-10T17:08:56+00:00</published>
<link rel='alternate' type='text/html' href='http://git.a14m.dev/ansible-distro-configure.git/commit/?id=0e01d4fbcefd68ab748b5ec0cd42473f63d8235b'/>
<id>0e01d4fbcefd68ab748b5ec0cd42473f63d8235b</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Add wg_portal role to install vpn web interface manager</title>
<updated>2025-09-10T15:09:53+00:00</updated>
<author>
<name>Ahmed AbdelHalim</name>
<email>pm@a14m.me</email>
</author>
<published>2025-09-10T15:09:53+00:00</published>
<link rel='alternate' type='text/html' href='http://git.a14m.dev/ansible-distro-configure.git/commit/?id=db5127984ff77d0ff78ca37f521cc6b1d6d33423'/>
<id>db5127984ff77d0ff78ca37f521cc6b1d6d33423</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Add ansible role</title>
<updated>2025-09-03T20:38:38+00:00</updated>
<author>
<name>Ahmed AbdelHalim</name>
<email>pm@a14m.me</email>
</author>
<published>2025-09-03T20:38:38+00:00</published>
<link rel='alternate' type='text/html' href='http://git.a14m.dev/ansible-distro-configure.git/commit/?id=d689def01763c3f91c86960111b935155a52c109'/>
<id>d689def01763c3f91c86960111b935155a52c109</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
<entry>
<title>Revert "Refactor: rename wireguard_gateway to gateway"</title>
<updated>2025-09-03T01:46:34+00:00</updated>
<author>
<name>Ahmed AbdelHalim</name>
<email>pm@a14m.me</email>
</author>
<published>2025-09-03T01:46:34+00:00</published>
<link rel='alternate' type='text/html' href='http://git.a14m.dev/ansible-distro-configure.git/commit/?id=23cc7f41f197197f5ca28b0eba9226050812575d'/>
<id>23cc7f41f197197f5ca28b0eba9226050812575d</id>
<content type='text'>
This reverts commit fdd0b5b58f0ebd39ad05e2dcb17faa6603145f97.
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This reverts commit fdd0b5b58f0ebd39ad05e2dcb17faa6603145f97.
</pre>
</div>
</content>
</entry>
</feed>
