@@ -356,6 +356,101 @@ func (ctrl *ManagerController) Run(ctx context.Context, r controller.Runtime, lo
356
356
}
357
357
}
358
358
359
+ mtu := cfgSpec .MTU
360
+
361
+ // always update the firewall rules, as allowedIPsSet might change at any moment due to peer up/down events
362
+ if err = safe .WriterModify (ctx , r ,
363
+ network .NewNfTablesChain (
364
+ network .NamespaceName ,
365
+ "kubespan_prerouting" ,
366
+ ),
367
+ func (r * network.NfTablesChain ) error {
368
+ spec := r .TypedSpec ()
369
+
370
+ spec .Type = nethelpers .ChainTypeFilter
371
+ spec .Hook = nethelpers .ChainHookPrerouting
372
+ spec .Priority = nethelpers .ChainPriorityFilter
373
+ spec .Policy = nethelpers .VerdictAccept
374
+
375
+ spec .Rules = []network.NfTablesRule {
376
+ {
377
+ MatchMark : & network.NfTablesMark {
378
+ Mask : constants .KubeSpanDefaultFirewallMask ,
379
+ Value : constants .KubeSpanDefaultFirewallMark ,
380
+ },
381
+ Verdict : pointer .To (nethelpers .VerdictAccept ),
382
+ },
383
+ {
384
+ MatchDestinationAddress : & network.NfTablesAddressMatch {
385
+ IncludeSubnets : allowedIPsSet .Prefixes (),
386
+ },
387
+ SetMark : & network.NfTablesMark {
388
+ Mask : ^ uint32 (constants .KubeSpanDefaultFirewallMask ),
389
+ Xor : constants .KubeSpanDefaultForceFirewallMark ,
390
+ },
391
+ Verdict : pointer .To (nethelpers .VerdictAccept ),
392
+ },
393
+ }
394
+
395
+ return nil
396
+ },
397
+ ); err != nil {
398
+ return fmt .Errorf ("error modifying nftables chain: %w" , err )
399
+ }
400
+
401
+ if err = safe .WriterModify (ctx , r ,
402
+ network .NewNfTablesChain (
403
+ network .NamespaceName ,
404
+ "kubespan_outgoing" ,
405
+ ),
406
+ func (r * network.NfTablesChain ) error {
407
+ spec := r .TypedSpec ()
408
+
409
+ spec .Type = nethelpers .ChainTypeRoute
410
+ spec .Hook = nethelpers .ChainHookOutput
411
+ spec .Priority = nethelpers .ChainPriorityFilter
412
+ spec .Policy = nethelpers .VerdictAccept
413
+
414
+ spec .Rules = []network.NfTablesRule {
415
+ {
416
+ MatchMark : & network.NfTablesMark {
417
+ Mask : constants .KubeSpanDefaultFirewallMask ,
418
+ Value : constants .KubeSpanDefaultFirewallMark ,
419
+ },
420
+ Verdict : pointer .To (nethelpers .VerdictAccept ),
421
+ },
422
+ {
423
+ MatchOIfName : & network.NfTablesIfNameMatch {
424
+ InterfaceNames : []string {"lo" },
425
+ },
426
+ Verdict : pointer .To (nethelpers .VerdictAccept ),
427
+ },
428
+ {
429
+ MatchDestinationAddress : & network.NfTablesAddressMatch {
430
+ IncludeSubnets : allowedIPsSet .Prefixes (),
431
+ },
432
+ ClampMSS : & network.NfTablesClampMSS {
433
+ MTU : uint16 (mtu ),
434
+ },
435
+ },
436
+ {
437
+ MatchDestinationAddress : & network.NfTablesAddressMatch {
438
+ IncludeSubnets : allowedIPsSet .Prefixes (),
439
+ },
440
+ SetMark : & network.NfTablesMark {
441
+ Mask : ^ uint32 (constants .KubeSpanDefaultFirewallMask ),
442
+ Xor : constants .KubeSpanDefaultForceFirewallMark ,
443
+ },
444
+ Verdict : pointer .To (nethelpers .VerdictAccept ),
445
+ },
446
+ }
447
+
448
+ return nil
449
+ },
450
+ ); err != nil {
451
+ return fmt .Errorf ("error modifying nftables chain: %w" , err )
452
+ }
453
+
359
454
if ! updateSpecs {
360
455
// micro-optimization: skip updating specs if there are no changes to the incoming resources and no endpoint changes
361
456
r .ResetRestartBackoff ()
@@ -384,8 +479,6 @@ func (ctrl *ManagerController) Run(ctx context.Context, r controller.Runtime, lo
384
479
return fmt .Errorf ("error modifying address: %w" , err )
385
480
}
386
481
387
- mtu := cfgSpec .MTU
388
-
389
482
for _ , spec := range []network.RouteSpecSpec {
390
483
{
391
484
Family : nethelpers .FamilyInet4 ,
@@ -465,98 +558,6 @@ func (ctrl *ManagerController) Run(ctx context.Context, r controller.Runtime, lo
465
558
return fmt .Errorf ("error modifying link spec: %w" , err )
466
559
}
467
560
468
- if err = safe .WriterModify (ctx , r ,
469
- network .NewNfTablesChain (
470
- network .NamespaceName ,
471
- "kubespan_prerouting" ,
472
- ),
473
- func (r * network.NfTablesChain ) error {
474
- spec := r .TypedSpec ()
475
-
476
- spec .Type = nethelpers .ChainTypeFilter
477
- spec .Hook = nethelpers .ChainHookPrerouting
478
- spec .Priority = nethelpers .ChainPriorityFilter
479
- spec .Policy = nethelpers .VerdictAccept
480
-
481
- spec .Rules = []network.NfTablesRule {
482
- {
483
- MatchMark : & network.NfTablesMark {
484
- Mask : constants .KubeSpanDefaultFirewallMask ,
485
- Value : constants .KubeSpanDefaultFirewallMark ,
486
- },
487
- Verdict : pointer .To (nethelpers .VerdictAccept ),
488
- },
489
- {
490
- MatchDestinationAddress : & network.NfTablesAddressMatch {
491
- IncludeSubnets : allowedIPsSet .Prefixes (),
492
- },
493
- SetMark : & network.NfTablesMark {
494
- Mask : ^ uint32 (constants .KubeSpanDefaultFirewallMask ),
495
- Xor : constants .KubeSpanDefaultForceFirewallMark ,
496
- },
497
- Verdict : pointer .To (nethelpers .VerdictAccept ),
498
- },
499
- }
500
-
501
- return nil
502
- },
503
- ); err != nil {
504
- return fmt .Errorf ("error modifying nftables chain: %w" , err )
505
- }
506
-
507
- if err = safe .WriterModify (ctx , r ,
508
- network .NewNfTablesChain (
509
- network .NamespaceName ,
510
- "kubespan_outgoing" ,
511
- ),
512
- func (r * network.NfTablesChain ) error {
513
- spec := r .TypedSpec ()
514
-
515
- spec .Type = nethelpers .ChainTypeRoute
516
- spec .Hook = nethelpers .ChainHookOutput
517
- spec .Priority = nethelpers .ChainPriorityFilter
518
- spec .Policy = nethelpers .VerdictAccept
519
-
520
- spec .Rules = []network.NfTablesRule {
521
- {
522
- MatchMark : & network.NfTablesMark {
523
- Mask : constants .KubeSpanDefaultFirewallMask ,
524
- Value : constants .KubeSpanDefaultFirewallMark ,
525
- },
526
- Verdict : pointer .To (nethelpers .VerdictAccept ),
527
- },
528
- {
529
- MatchOIfName : & network.NfTablesIfNameMatch {
530
- InterfaceNames : []string {"lo" },
531
- },
532
- Verdict : pointer .To (nethelpers .VerdictAccept ),
533
- },
534
- {
535
- MatchDestinationAddress : & network.NfTablesAddressMatch {
536
- IncludeSubnets : allowedIPsSet .Prefixes (),
537
- },
538
- ClampMSS : & network.NfTablesClampMSS {
539
- MTU : uint16 (mtu ),
540
- },
541
- },
542
- {
543
- MatchDestinationAddress : & network.NfTablesAddressMatch {
544
- IncludeSubnets : allowedIPsSet .Prefixes (),
545
- },
546
- SetMark : & network.NfTablesMark {
547
- Mask : ^ uint32 (constants .KubeSpanDefaultFirewallMask ),
548
- Xor : constants .KubeSpanDefaultForceFirewallMark ,
549
- },
550
- Verdict : pointer .To (nethelpers .VerdictAccept ),
551
- },
552
- }
553
-
554
- return nil
555
- },
556
- ); err != nil {
557
- return fmt .Errorf ("error modifying nftables chain: %w" , err )
558
- }
559
-
560
561
if rulesMgr == nil {
561
562
rulesMgr = ctrl .RulesManagerFactory (constants .KubeSpanDefaultRoutingTable , constants .KubeSpanDefaultForceFirewallMark , constants .KubeSpanDefaultFirewallMask )
562
563
0 commit comments