Files
automtu/__pycache__/main.cpython-313.pyc

67 lines
12 KiB
Plaintext
Raw Normal View History

<EFBFBD>
<00><><EFBFBD>h<EFBFBD><00><00><><00>SrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSSKrSr Sr
Sr Sr Sr SrS rS
rS rSS jrSS jrSr\S:Xa\"5 gg)u<>
wg_mtu_auto.py — Auto-detect egress IF, optionally probe Path MTU to one or more targets,
compute the correct WireGuard MTU, and apply it.
Examples:
sudo ./wg_mtu_auto.py
sudo ./wg_mtu_auto.py --force-egress-mtu 1452
sudo ./wg_mtu_auto.py --pmtu-target 46.4.224.77 --pmtu-target 2a01:4f8:2201:4695::2
sudo ./wg_mtu_auto.py --pmtu-target 46.4.224.77,2a01:4f8:2201:4695::2 --pmtu-policy min
./wg_mtu_auto.py --dry-run
<EFBFBD>Nc<00><><00>[R"US[R[RSS9RR 5$)NFT)<04>check<63>stdout<75>stderr<72>text)<06>
subprocess<EFBFBD>run<75>PIPE<50>DEVNULLr<00>strip<69><01>cmds <20>Y/home/kevinveenbirkenbach/Repositories/github.com/kevinveenbirkenbach/wg-mtu-auto/main.pyr r s3<00><00> <15>><3E>><3E>#<23>U<EFBFBD>:<3A>?<3F>?<3F>:<3A>K]<5D>K]<5D>dh<64> i<> p<> p<> v<> v<> x<>x<>c<00>z<00>[R"U[R[RS9R$)N)rr)rr r <00>
returncoder s r<00>rcrs'<00><00> <15>><3E>><3E>#<23>j<EFBFBD>&8<>&8<><1A>AS<41>AS<41> T<> _<> _<>_rc<00>P<00>[R"SU35R5$)N<>/sys/class/net/)<03>pathlib<69>Path<74>exists)<01>ifaces r<00> exists_ifacers!<00><00> <12><<3C><<3C>/<2F>%<25><17>1<> 2<> 9<> 9<> ;<3B>;rc<00>j<00>/n/SQ/SQ4Hen[U5nUR5HCn[R"SU5nU(dM#UR UR S55 ME Mg U(dZ/SQ/SQ4HNn[U5n[R"SU5nU(dM.UR UR S55 MP /nUHVnU(a2US:Xd,[R "SU5(d[U5(dM>Xe;dMEUR U5 MX U$) N)<05>ipz-4<>route<74>show<6F>default)r<00>-6rrrz \bdev\s+(\S+)<29>)rr<00>getz1.1.1.1)rr rr"z2606:4700:4700::1111<31>loz ^(wg|tun)\d*$)r <00>
splitlines<EFBFBD>re<72>search<63>append<6E>group<75>matchr)<07>devsr<00>out<75>line<6E>m<>uniq<69>ds r<00>get_default_ifacesr0s<><00><00> <0A>D<EFBFBD>4<>6Z<36>[<5B><03><11>#<23>h<EFBFBD><03><17>N<EFBFBD>N<EFBFBD>$<24>D<EFBFBD><12> <09> <09>*<2A>D<EFBFBD>1<>A<EFBFBD><10>q<EFBFBD>$<24>+<2B>+<2B>a<EFBFBD>g<EFBFBD>g<EFBFBD>a<EFBFBD>j<EFBFBD>)<29>%<25>\<01>
<10>2<>4d<34>e<>C<EFBFBD><15>c<EFBFBD>(<28>C<EFBFBD><12> <09> <09>*<2A>C<EFBFBD>0<>A<EFBFBD><10>q<EFBFBD>$<24>+<2B>+<2B>a<EFBFBD>g<EFBFBD>g<EFBFBD>a<EFBFBD>j<EFBFBD>)<29>f<01> <0E>D<EFBFBD> <11><01><10>A<EFBFBD><14>I<EFBFBD><12><18><18>*:<3A>A<EFBFBD>!><3E>!><3E>l<EFBFBD>ST<53>o<EFBFBD>o<EFBFBD>W_<57> <0C>=<3D>$<24>+<2B>+<2B>a<EFBFBD>.<2E><12> <10>Krc<00><><00>[SUS3S5n[UR5R55sSSS5 $!,(df  g=f)Nrz/mtu<74>r)<04>open<65>int<6E>readr )r<00>fs r<00>read_mtur7*s8<00><00> <0A><0F><05>w<EFBFBD>d<EFBFBD>+<2B>C<EFBFBD> 0<>A<EFBFBD><12>1<EFBFBD>6<EFBFBD>6<EFBFBD>8<EFBFBD>><3E>><3E>#<23>$<24>
1<EFBFBD> 0<> 0<>s <00>'A<03>
Ac <00><><00>U(a[SUSU35 g[R"SSSS[U5SU/SS 9 g)
Nz"[wg-mtu] DRY-RUN: ip link set mtu z dev r<00>link<6E>set<65>mtu<74>devT)r)<04>printrr <00>str)rr;<00>drys r<00>set_mtur@.s<<00><00>
<EFBFBD> <0A>2<>3<EFBFBD>%<25>u<EFBFBD>U<EFBFBD>G<EFBFBD>D<>E<><12><0E><0E><04>V<EFBFBD>E<EFBFBD>%<25><03>C<EFBFBD><08><15>u<EFBFBD>E<>T<EFBFBD>Rrc<00><><00>U(dI[R"5S:wa/[S[RS9 [R
"S5 ggg)Nrz;[wg-mtu][ERROR] Please run as root (sudo) or use --dry-run.<2E><01>filer!)<06>os<6F>geteuidr=<00>sysr<00>exit)r?s r<00> require_rootrH4s6<00><00> <0E>2<EFBFBD>:<3A>:<3A><<3C>1<EFBFBD>$<24> <0A>K<>RU<52>R\<5C>R\<5C>]<5D> <0B><08><08><11> <0B>%<25>3rc<00><><00>[[R"U5[R5$![a SU;s$f=f)N<>:)<05>
isinstance<EFBFBD> ipaddress<73>
ip_address<EFBFBD> IPv6Address<73>
ValueError)<01>addrs r<00>is_ipv6rQ9s><00><00><1B><19>)<29>.<2E>.<2E>t<EFBFBD>4<>i<EFBFBD>6K<36>6K<36>L<>L<><4C> <15><1B><12>d<EFBFBD>{<7B><1A><1B>s<00>-0<00>A<03>Ac<00><><00>SSSSSS[U5S[[S[[U5555/ n[ U5(aUR SS 5 [ X1/-5S
:H$) N<>pingz-M<>doz-c<>1z-sz-Wr!r r)r><00>maxr4<00>roundrQ<00>insertr)<04>payload<61>target<65> timeout_s<5F>bases r<00>ping_okr]?s`<00><00> <12>4<EFBFBD><04>T<EFBFBD>#<23>d<EFBFBD>3<EFBFBD>w<EFBFBD><<3C><04>S<EFBFBD><13>Q<EFBFBD><03>E<EFBFBD>R[<5B>L\<5C>H]<5D>A^<5E>=_<> `<60>D<EFBFBD><0E>v<EFBFBD><EFBFBD><EFBFBD> <0C> <0B> <0B>A<EFBFBD>t<EFBFBD><1C> <0A>d<EFBFBD>X<EFBFBD>o<EFBFBD> <1E>!<21> #<23>#rc<00><00>[U5(aSOSn[XU5(dSHn[XPU5(dMUn O gXSp<>nXg::a,Xg-S-n [X<>U5(aU nU S-nOU S-
nXg::aM,UbX<>-$S$)z_Binary-search the largest payload that passes with DF. Return Path-MTU (payload + hdr) or None.<2E>0<00>)i<>i<>itN<>r!)rQr])
rZ<00>
lo_payload<EFBFBD>
hi_payload<EFBFBD>timeout<75>hdr<64>pr#<00>hi<68>best<73>mids
r<00>
probe_pmturjEs<><00><00><17><06><0F><0F>"<22>R<EFBFBD>C<EFBFBD> <12>:<3A>w<EFBFBD> /<2F> /<2F>#<23>A<EFBFBD><16>q<EFBFBD>'<27>*<2A>*<2A><1E>
<EFBFBD><15>$<24>
<18><1D>4<EFBFBD>D<EFBFBD>B<EFBFBD>
<0C>(<28><11>w<EFBFBD>1<EFBFBD>n<EFBFBD><03> <12>3<EFBFBD><07> (<28> (<28><16>D<EFBFBD><14>q<EFBFBD><17>B<EFBFBD><14>q<EFBFBD><17>B<EFBFBD> <0A>(<28> <20>+<2B>D<EFBFBD>J<EFBFBD>5<><14>5rc<00><><00>U(d [S5eUS:Xa [U5$US:Xa [U5$US:Xa([[R
"[ U555$[SU35e)z7Pick an effective PMTU from a list of successful PMTUs.zno PMTUs to choose from<6F>minrV<00>medianzunknown policy )rOrlrVr4<00>
statisticsrm<00>sorted)<02>pmtus<75>policys r<00>choose_effectiverrZsg<00><00> <10><18>2<>3<>3<> <0A><15><EFBFBD><12>5<EFBFBD>z<EFBFBD><19> <0A><15><EFBFBD><12>5<EFBFBD>z<EFBFBD><19> <0A><18><19><12>:<3A>$<24>$<24>V<EFBFBD>E<EFBFBD>]<5D>3<>4<>4<>
<14><EFBFBD>v<EFBFBD>h<EFBFBD>/<2F>
0<EFBFBD>0rc <00>
<00>[R"SS9nURSSS9 URS[SS9 URS [R
R S
S 5S S 9 URS[[[R
R SS55SS9 URS[[[R
R SS55SS9 URSSSS9 URS[SSS9 URS[SS S9 URS![S"S#S9 URS$/S%QS&S'S(9 URS)S*S+S9 UR5n[UR5 UR=(d [5(a [5S,OSnU(d.[S-[RS.9 [R "S/5 [#U5(d2[S0US13[RS.9 [R "S25 [S3U35 UR$(aH[S4UR$S5U35 ['X!R$UR5 UR$nO [)U5n[S6U35 Un/nUR*(ahUR*HXnUR-UR/S75Vs/sH)owR15(dMUR15PM+ sn5 MZ U(a<>0n/n [S8S9R3U5S:UR4S;35 UHgn
[7X<>R8UR:UR<5n X<>U
'U (aU R?U 5 [S<U
S=U (aS>U -OS?35 Mi U (a<[AX<>R45n [S@UR4SAU 35 [CX<5nO [SB5 [EURFXARH-
5n [SCURJSDU SEURHSFURFS;3 5 [#URJ5(a<['URJX<>R5 [SGURJSHU 35 O[SIURJSJ35 [SKUSLUSMUS9URJSNU 3
5 gs snf)ONzWCompute/apply WireGuard MTU based on egress MTU and optional multi-target PMTU probing.)<01> descriptionz --egress-ifz5Explicit egress interface (auto-detected if omitted).)<01>helpz--force-egress-mtuz?Force this MTU on the egress interface before computing wg MTU.)<02>typeruz--wg-if<69>WG_IF<49>wg0z(WireGuard interface name (default: wg0).)rruz --wg-overhead<61> WG_OVERHEAD<41>80z/Bytes of WG overhead to subtract (default: 80).)rvrruz--wg-min<69>WG_MIN<49>1280z'Minimum allowed WG MTU (default: 1280).z --pmtu-targetr'zQTarget hostname/IP to probe PMTU. Can be given multiple times OR comma-separated.)<02>actionruz--pmtu-timeout<75><00>?z0Timeout (seconds) per ping probe (default: 1.0).z--pmtu-min-payload<61><64>z4Lower bound payload for PMTU search (default: 1200).z--pmtu-max-payload<61><64>z>Upper bound payload for PMTU search (default: 1472 ~ 1500-28).z --pmtu-policy)rlrmrVrlzDHow to choose effective PMTU across multiple targets (default: min).)<03>choicesrruz --dry-run<75>
store_truez&Show actions without applying changes.rzD[wg-mtu][ERROR] Could not detect egress interface (use --egress-if).rBraz[wg-mtu][ERROR] Interface z does not exist.<2E>z$[wg-mtu] Detected egress interface: z[wg-mtu] Forcing egress MTU z on z[wg-mtu] Egress base MTU: <20>,z[wg-mtu] Probing Path MTU for: z, z (policy=<3D>)z [wg-mtu] - z: z%sz probe failedz#[wg-mtu] Selected Path MTU (policy=z): zE[wg-mtu] WARNING: All PMTU probes failed. Falling back to egress MTU.z[wg-mtu] Computed z MTU: z (overhead=z, min=z[wg-mtu] Applied: z MTU z[wg-mtu] NOTE: zA not present yet. Start WireGuard first, then re-run this script.z[wg-mtu] Done. Summary: egress=z mtu=z, effective_mtu=z_mtu=)&<26>argparse<73>ArgumentParser<65> add_argumentr4rD<00>environr"<00>float<61>
parse_argsrH<00>dry_run<75> egress_ifr0r=rFrrGr<00>force_egress_mtur@r7<00> pmtu_target<65>extend<6E>splitr <00>join<69> pmtu_policyrj<00>pmtu_min_payload<61>pmtu_max_payload<61> pmtu_timeoutr'rrrlrV<00>wg_min<69> wg_overhead<61>wg_if)<0E>ap<61>args<67>egress<73>base_mtu<74> effective_mtu<74> pmtu_targets<74>item<65>x<>results<74>good<6F>trf<00>chosen<65>wg_mtus r<00>mainr<6E>fsj<00><00> <11> <20> <20>.G<02>
H<02>B<EFBFBD><06>O<EFBFBD>O<EFBFBD>M<EFBFBD>(_<>O<EFBFBD>`<60><06>O<EFBFBD>O<EFBFBD>(<28>s<EFBFBD>9z<39>O<EFBFBD>{<7B><06>O<EFBFBD>O<EFBFBD>I<EFBFBD>r<EFBFBD>z<EFBFBD>z<EFBFBD>~<7E>~<7E>g<EFBFBD>e<EFBFBD>'D<>Ku<4B>O<EFBFBD>v<><06>O<EFBFBD>O<EFBFBD>O<EFBFBD>#<23>s<EFBFBD>2<EFBFBD>:<3A>:<3A>><3E>><3E>-<2D>X\<5C>;]<5D>7^<5E>fW<02>O<EFBFBD>X<02><06>O<EFBFBD>O<EFBFBD>J<EFBFBD>S<EFBFBD>#<23>b<EFBFBD>j<EFBFBD>j<EFBFBD>n<EFBFBD>n<EFBFBD>X<EFBFBD>f<EFBFBD>6U<36>2V<32>^G<02>O<EFBFBD>H<02><06>O<EFBFBD>O<EFBFBD>O<EFBFBD>H<EFBFBD><O<02>O<EFBFBD>P<02><06>O<EFBFBD>O<EFBFBD>$<24>5<EFBFBD>#<23>Dv<44>O<EFBFBD>w<><06>O<EFBFBD>O<EFBFBD>(<28>s<EFBFBD>D<EFBFBD>G}<7D>O<EFBFBD>~<7E><06>O<EFBFBD>O<EFBFBD>(<28>s<EFBFBD>D<EFBFBD>HH<02>O<EFBFBD>I<02><06>O<EFBFBD>O<EFBFBD>O<EFBFBD>-C<>U<EFBFBD>_<><14>a<01><06>O<EFBFBD>O<EFBFBD>K<EFBFBD> <0C>;c<>O<EFBFBD>d<> <0A>=<3D>=<3D>?<3F>D<EFBFBD><10><14><1C><1C><1E><12>^<5E>^<5E> Z<>;M<>;O<>;O<> 2<> 4<>Q<EFBFBD> 7<>UY<55>F<EFBFBD> <11> <0A>T<>[^<5E>[e<>[e<>f<> <0B><08><08><11> <0B> <17><06> <1F> <1F> <0A>*<2A>6<EFBFBD>(<28>2B<32>C<>#<23>*<2A>*<2A>U<>WZ<57>W_<57>W_<57>`a<>Wb<57> <09> 0<><16><08>
9<EFBFBD>:<3A> <0C><1C><1C> <0A>,<2C>T<EFBFBD>-B<>-B<>,C<>4<EFBFBD><06>x<EFBFBD>P<>Q<><0F><06>-<2D>-<2D>t<EFBFBD>|<7C>|<7C><<3C><17>(<28>(<28><08><1B>F<EFBFBD>#<23><08> <09> &<26>x<EFBFBD>j<EFBFBD>
1<EFBFBD>2<><1D>M<EFBFBD><15>L<EFBFBD> <0B><17><17><18>$<24>$<24>D<EFBFBD> <18> <1F> <1F>D<EFBFBD>J<EFBFBD>J<EFBFBD>s<EFBFBD>O<EFBFBD> Q<>O<EFBFBD>q<EFBFBD>w<EFBFBD>w<EFBFBD>y<EFBFBD><19><11><17><17><19>O<EFBFBD> Q<> R<>%<25><14><14><07><11><04> <0A>/<2F><04> <09> <09>,<2C>0G<30>/H<> <09>RV<52>Rb<52>Rb<52>Qc<51>cd<63>e<>f<><1D>A<EFBFBD><1A>1<EFBFBD>3<>3<>T<EFBFBD>5J<35>5J<35>D<EFBFBD>L]<5D>L]<5D>^<5E>A<EFBFBD><1A>A<EFBFBD>J<EFBFBD><10><14> <0B> <0B>A<EFBFBD><0E> <11>L<EFBFBD><11><03>2<EFBFBD>!<21>d<EFBFBD>Q<EFBFBD>h<EFBFBD><1E>%H<>I<> J<> <1E> <10>%<25>d<EFBFBD>,<<3C>,<<3C>=<3D>F<EFBFBD> <11>7<><04>8H<38>8H<38>7I<37><13>V<EFBFBD>H<EFBFBD>U<> V<><1F><08>1<>M<EFBFBD> <11>Y<> Z<><11><14><1B><1B>m<EFBFBD>.><3E>.><3E>><3E> ?<3F>F<EFBFBD> <09> <1E>t<EFBFBD>z<EFBFBD>z<EFBFBD>l<EFBFBD>&<26><16><08> <0C>T<EFBFBD>EU<45>EU<45>DV<44>V\<5C>]a<>]h<>]h<>\i<>ij<69>
k<EFBFBD>l<><14>D<EFBFBD>J<EFBFBD>J<EFBFBD><1F><1F><0F><04>
<EFBFBD>
<EFBFBD>F<EFBFBD>L<EFBFBD>L<EFBFBD>1<> <0A>"<22>4<EFBFBD>:<3A>:<3A>,<2C>e<EFBFBD>F<EFBFBD>8<EFBFBD><<3C>=<3D> <0A><0F><04>
<EFBFBD>
<EFBFBD>|<7C>+l<>m<>n<> <09> +<2B>F<EFBFBD>8<EFBFBD>5<EFBFBD><18>
<EFBFBD>BR<EFBFBD>S`<60>Ra<52>ac<61>dh<64>dn<64>dn<64>co<63>ot<6F>u{<7B>t|<7C>
}<7D>~<7E><>=!Rs <00>*T
<EFBFBD>T
<EFBFBD>__main__)rr<>r~)rl)<16>__doc__r<5F>rDr%rrFrrLrnr rrr0r7r@rHrQr]rjrrr<><00>__name__<5F>rr<00><module>r<>so<00><01>
<04>I<01>H<>H<>H<>y<01>`<01><<3C><10>$%<25>S<01> <14>
<1B> $<24> 6<>*
1<>I<01>V <0C>z<EFBFBD><19><08>F<EFBFBD>r