<feed xmlns='http://www.w3.org/2005/Atom'>
<title>ansible-distro-configure.git/site.yml, branch main</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>Refactor pve cgit to use generic proxy</title>
<updated>2026-07-16T15:02:52+00:00</updated>
<author>
<name>Ahmed Abdelhalim</name>
<email>pm@a14m.dev</email>
</author>
<published>2026-07-16T12:39:19+00:00</published>
<link rel='alternate' type='text/html' href='http://git.a14m.dev/ansible-distro-configure.git/commit/?id=756dc388bedf97b68449e919a6730788f730c7b8'/>
<id>756dc388bedf97b68449e919a6730788f730c7b8</id>
<content type='text'>
This is refactoring the PoC for deploying cgit on pve, to now move to a
more standard deployment with dedicated agnonstic proxy role/container
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
This is refactoring the PoC for deploying cgit on pve, to now move to a
more standard deployment with dedicated agnonstic proxy role/container
</pre>
</div>
</content>
</entry>
<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.dev</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=1cbb9df950175e698e1edc87953e8f4bfb22b88a'/>
<id>1cbb9df950175e698e1edc87953e8f4bfb22b88a</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.dev</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=4d42a2b0950882bf63380a08c90007970c38b4ce'/>
<id>4d42a2b0950882bf63380a08c90007970c38b4ce</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.dev</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=f68a932b8270a3c6b0c839c86490756bed6a943f'/>
<id>f68a932b8270a3c6b0c839c86490756bed6a943f</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.dev</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=2aa105e6cc8255e07867ed2efb025814d952c1d2'/>
<id>2aa105e6cc8255e07867ed2efb025814d952c1d2</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.dev</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=b81be82858ca24a19c4ba800dcacf0fb8a39a971'/>
<id>b81be82858ca24a19c4ba800dcacf0fb8a39a971</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.dev</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=b92b0101920627cf0b8e7dd0d826d25b9fd96a41'/>
<id>b92b0101920627cf0b8e7dd0d826d25b9fd96a41</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.dev</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=7c51e0642ec18a88adb8d4b56c54d6de0e0d12cf'/>
<id>7c51e0642ec18a88adb8d4b56c54d6de0e0d12cf</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.dev</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=a5983fd890fc94650e9cc0b890220931ad3b3a88'/>
<id>a5983fd890fc94650e9cc0b890220931ad3b3a88</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.dev</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=97e4317089d29ad1e74daf6a82b05068440f0aa1'/>
<id>97e4317089d29ad1e74daf6a82b05068440f0aa1</id>
<content type='text'>
</content>
<content type='xhtml'>
<div xmlns='http://www.w3.org/1999/xhtml'>
<pre>
</pre>
</div>
</content>
</entry>
</feed>
